23

文字列が大文字のみで構成されているかどうかを確認したい。MySQL では RLIKE/REGEXP が大文字と小文字を区別しないことを知っています。:upper:だから私は文字クラスを使用しようとしました:

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

z は小文字ですが、これは true になります...なぜですか?

4

3 に答える 3

49

REGEXP は、バイナリ文字列で使用する場合を除き、大文字と小文字を区別しません。

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

それを念頭に置いて、次のようなことをしてください。

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

上記の例を使用すると、1 つ以上の大文字を含むメールのリストが取得されます。

于 2015-09-22T23:06:13.147 に答える
21

私にとってこれは機能し、正規表現を使用していません。基本的に、mysql 自体によって大文字化されたフィールドとそれ自体を比較します。

-- will detect all names that are not in uppercase
SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name <> BINARY UPPER(name)
;
于 2016-05-02T12:02:46.990 に答える