【问题标题】:How to check for uppercase letters in MySQL?如何在 MySQL 中检查大写字母?
【发布时间】:2013-05-09 15:59:00
【问题描述】:

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

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

虽然 z 是小写的,但这是真的,...为什么?

【问题讨论】:

    标签: mysql regex uppercase


    【解决方案1】:

    REGEXP 不区分大小写,除非与二进制字符串一起使用。

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

    因此,考虑到这一点,只需执行以下操作:

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

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

    【讨论】:

      【解决方案2】:

      对我来说,这是可行的,并且不使用正则表达式。它基本上将字段与mysql本身大写的自身进行比较。

      -- will detect all names that are not in uppercase
      SELECT 
          name, UPPER(name) 
      FROM table 
      WHERE 
          BINARY name <> BINARY UPPER(name)
      ;
      

      【讨论】:

      • 这为我解决了,只是想检查我的列值中是否有任何大写字母。替换了LOWER 答案中的UPPER
      • 为了解释为什么会这样,MySQL 中的字符串比较不区分大小写。这意味着在比较过程中,“XYZ”和“xyz”这两个词被视为相同。如果我们使用 BINARY 进行比较,则会比较确切的字符。
      【解决方案3】:

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

      CHARACTER SET latin1 COLLATE latin1_general_cs
      

      然后试试这个查询,

      SELECT 'z' REGEXP '^[A-Z]+$'
      

      【讨论】:

      • +1 有同样的想法,但不知道 latin1 字符集的诀窍
      • 那么,为什么字符类不起作用呢?因为我使用了错误的排序规则?为什么在A-Z 的作用相同时添加:upper:,而当排序规则为*_ci 时,:upper::lower: 相同?我以为*_ci 给出了默认值,但是当使用:upper: 时,它会查找大写字母。在dev.mysql.com/doc/refman/5.0/en/regexp.html 上[:character_class:] 的描述中说我应该看ctype(3) 的手册页。我试过help ctypeman ctype,...没有任何效果
      • 我试过了:SELECT 'z' RLIKE '^[A-Z]$' COLLATE 'utf8_general_cs';,这给了我一个错误:ERROR 1273 (HY000): Unknown collation: 'utf8_general_cs'。命令SELECT 'z' RLIKE '^[A-Z]$' COLLATE 'utf8_general_ci'; 工作正常。那么如何安装区分大小写的排序规则?
      • 找到了错误的解决方案:SELECT CONVERT(_utf8'z' USING 'latin1') RLIKE CONVERT(_utf8'[[:upper:]]' USING 'latin1') COLLATE 'latin1_general_cs'; 这真的是向 MySQL 引入区分大小写的唯一方法吗?
      • 这个怎么样,没有正则表达式。 SELECT * FROM table where column = upper(column);
      猜你喜欢
      • 2013-04-14
      • 2011-02-18
      • 2017-09-24
      • 2011-05-14
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多