MySQL Regexp是否支持Unicode匹配

时间:2013-01-16 10:28:42

标签: mysql regex unicode pattern-matching

有没有人知道Mysql的正则表达式是否支持unicode?我一直在做一些研究,大多数博客等似乎表明存在问题或者不支持。我想知道最好是使用LIKE进行unicode模式匹配,使用regexp进行ASCII增强模式匹配吗?
我喜欢能够在字符串的开头或结尾搜索匹配的想法,但如果regexp不支持unicode,那么如果我的文本是unicode,这可能会很困难。

3 个答案:

答案 0 :(得分:7)

  1.   

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

    正如Regular Expressions所述:

      

    警告

         

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

  2.   

    我想知道最好使用LIKE进行unicode模式匹配,使用regexp进行ASCII增强模式匹配吗?

    是的,那是最好的。

  3.   

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

    也可以使用LIKE来做到这一点:

    WHERE foo LIKE 'bar%'
    

    WHERE foo LIKE '%bar'
    

答案 1 :(得分:1)

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

答案 2 :(得分:0)

从Mysql 8.0开始,unicode matching is supported

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