23

我想检查一个字符串是否只包含大写字母。我知道 RLIKE/REGEXP 在 MySQL 中不区分大小写。所以我尝试使用:upper:字符类:

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

这是真的,尽管 z 是小写的,......为什么?

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]';

使用上面的示例,您将获得包含一个或多个大写字母的电子邮件列表。

于 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 回答
7

更改为区分大小写的排序规则,例如。

CHARACTER SET latin1 COLLATE latin1_general_cs

然后试试这个查询,

SELECT 'z' REGEXP '^[A-Z]+$'
于 2013-05-15T07:18:29.103 回答