Как проверить заглавные буквы в MySQL?

Я хочу проверить, если строка содержит только прописные буквы. Я знаю, что RLIKE/REGEXP не чувствительны к регистру в MySQL. Поэтому я попытался использовать класс: :upper: character:

SELECT 'z' REGEXP '^[[:upper:]]+$';

Это дает истину, хотя z в нижнем регистре... почему?

Ответ 1

REGEXP не чувствителен к регистру, за исключением случаев, когда используется с двоичными строками.

http://dev.mysql.com/doc/refman/5.7/en/regexp.html

Поэтому, имея в виду это, просто сделайте следующее:

SELECT * FROM 'users' WHERE 'email' REGEXP BINARY '[A-Z]';

Используя приведенный выше пример, вы получите список писем, содержащих одну или несколько прописных букв.

Ответ 2

Для меня это работает и не использует регулярное выражение. Он в основном сравнивает поле с самим верхним индексом самой mysql.

-- will detect all names that are not in uppercase
SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name <> BINARY UPPER(name)
;

Ответ 3

изменение на чувствительность к регистру, например.

CHARACTER SET latin1 COLLATE latin1_general_cs

затем попробуйте этот запрос,

SELECT 'z' REGEXP '^[A-Z]+$'

Ответ 4

Это сработало для меня, чтобы получить список строк, имеющих только символы верхнего регистра:

SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name = BINARY UPPER(name)
;