文字列が大文字のみで構成されているかどうかを確認したいと思います。 MySQLではRLIKE/REGEXPで大文字と小文字が区別されないことを知っています。そこで、:upper:
文字クラスを使用しようとしました。
SELECT 'z' REGEXP '^[[:upper:]]+$';
Zは小文字ですが、これは当てはまります...なぜですか?
REGEXPは、バイナリ文字列で使用される場合を除いて、大文字と小文字を区別しません。
したがって、それを念頭に置いて、次のようなことを行ってください。
SELECT * FROM `users` WHERE `email` REGEXP BINARY '[A-Z]';
上記の例を使用すると、1つ以上の大文字を含む電子メールのリストが得られます。
私にとってこれは機能し、正規表現を使用していません。基本的に、フィールドをmysql自体によって大文字にされたそれ自体と比較します。
-- will detect all names that are not in uppercase
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name <> BINARY UPPER(name)
;
大文字と小文字を区別する照合に変更します。
CHARACTER SET latin1 COLLATE latin1_general_cs
次に、このクエリを試してください。
SELECT 'z' REGEXP '^[A-Z]+$'
これは、大文字のみの行のリストを取得するのに役立ちました。
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name = BINARY UPPER(name)
;