【问题标题】:Does MySQL Regexp support Unicode matchingMySQL Regexp 是否支持 Unicode 匹配
【发布时间】:2013-01-16 10:28:42
【问题描述】:

有谁知道Mysql的正则表达式是否支持unicode?我一直在做一些研究,大多数博客等似乎表明存在问题或不受支持。我想知道最好将 LIKE 用于 unicode 模式匹配,将 regexp 用于 ASCII 增强模式匹配?

我喜欢能够在字符串的开头或结尾搜索匹配的想法,但是如果 regexp 不支持 unicode,那么如果我的文本是 unicode,这可能会很困难。

【问题讨论】:

    标签: mysql regex unicode pattern-matching


    【解决方案1】:
    1. 有谁知道Mysql的正则表达式是否支持unicode?我一直在做一些研究,大多数博客等似乎都表明存在问题或不受支持。

      Regular Expressions 中所述:

      警告

      REGEXPRLIKE 运算符以字节方式工作,因此它们不是多字节安全的,并且可能会在使用多字节字符集时产生意外结果。此外,这些运算符通过字节值比较字符,即使给定的排序规则将重音字符视为相等,重音字符也可能不相等。

    2. 我想知道是否最好使用 LIKE 进行 unicode 模式匹配和 regexp 进行 ASCII 增强模式匹配?

      是的,这样最好。

    3. 我喜欢能够在字符串的开头或结尾搜索匹配项的想法,但如果 regexp 不支持 unicode,那么如果我的文本是 unicode,这可能会很困难。

      LIKE 也可以做到这一点:

      WHERE foo LIKE 'bar%'
      

      还有:

      WHERE foo LIKE '%bar'
      

    【讨论】:

      【解决方案2】:

      MariaDB starting with 10.0.5

      REGEXP/RLIKE 和新函数 REGEXP_REPLACE()、REGEXP_INSTR() 和 REGEXP_SUBSTR() 现在可以与所有 MariaDB 支持的多字节字符集,包括东亚 字符集(big5、gb2313、gbk、eucjp、eucjpms、cp932、ujis、 euckr) 和 Unicode 字符集 (utf8, utf8mb4, ucs2, utf16, utf16le、utf32)。在早期版本的 MariaDB(以及所有 MySQL 版本)REGEXP/RLIKE 仅适用于 8 位字符集。

      【讨论】:

        【解决方案3】:

        从Mysql 8.0开始,unicode matching is supported

        有关兼容性问题,另请参阅 the documentation

        【讨论】:

          猜你喜欢
          • 2013-05-29
          • 1970-01-01
          • 2017-02-11
          • 1970-01-01
          • 2011-02-12
          • 1970-01-01
          • 1970-01-01
          • 2014-04-19
          相关资源
          最近更新 更多