文字列が大文字のみで構成されているかどうかを確認したい。MySQL では RLIKE/REGEXP が大文字と小文字を区別しないことを知っています。:upper:
だから私は文字クラスを使用しようとしました:
SELECT 'z' REGEXP '^[[:upper:]]+$';
z は小文字ですが、これは true になります...なぜですか?
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)
;