Я хочу проверить, если строка содержит только прописные буквы. Я знаю, что RLIKE/REGEXP не чувствительны к регистру в MySQL. Поэтому я попытался использовать класс: :upper:
character:
SELECT 'z' REGEXP '^[[:upper:]]+$';
Это дает истину, хотя z в нижнем регистре... почему?
REGEXP не чувствителен к регистру, за исключением случаев, когда используется с двоичными строками.
Поэтому, имея в виду это, просто сделайте следующее:
SELECT * FROM 'users' WHERE 'email' REGEXP BINARY '[A-Z]';
Используя приведенный выше пример, вы получите список писем, содержащих одну или несколько прописных букв.
изменение на чувствительность к регистру, например.
CHARACTER SET latin1 COLLATE latin1_general_cs
затем попробуйте этот запрос,
SELECT 'z' REGEXP '^[A-Z]+$'
Для меня это работает и не использует регулярное выражение. Он в основном сравнивает поле с самим верхним индексом самой mysql.
-- will detect all names that are not in uppercase
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name <> BINARY UPPER(name)
;
UPPER
в ответ на LOWER
.
:upper:
когдаAZ
делает то же самое, а:upper:
то же самое, что и:lower:
когда сопоставление*_ci
? Я думал, что*_ci
дает ошибку, но при использовании:upper:
он ищет заглавные буквы. В описании [: character_class:] на dev.mysql.com/doc/refman/5.0/en/regexp.html говорится, что я должен взглянуть на справочные страницыctype(3)
. Я пыталсяhelp ctype
,man ctype
, ... ничего не получалось