5

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

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

4

3 回答 3

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

    正则表达式中所述:

    警告

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

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

    是的,那将是最好的。

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

    也可以这样做LIKE

    WHERE foo LIKE 'bar%'
    

    和:

    WHERE foo LIKE '%bar'
    
于 2013-01-16T10:35:59.180 回答
3

MariaDB 从 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 位字符集。

于 2017-05-26T23:57:35.177 回答
0

从 Mysql 8.0 开始,支持 unicode 匹配

另请参阅有关兼容性问题的文档

于 2019-10-25T08:55:04.020 回答