有没有人知道Mysql的正则表达式是否支持unicode?我一直在做一些研究,大多数博客等似乎表明存在问题或者不支持。我想知道最好是使用LIKE进行unicode模式匹配,使用regexp进行ASCII增强模式匹配吗?
我喜欢能够在字符串的开头或结尾搜索匹配的想法,但如果regexp不支持unicode,那么如果我的文本是unicode,这可能会很困难。
答案 0 :(得分:7)
有没有人知道Mysql的正则表达式是否支持unicode?我一直在做一些研究,大多数博客等似乎表明存在问题或者不支持。
正如Regular Expressions所述:
警告
REGEXP
和RLIKE
运算符以字节方式工作,因此它们不是多字节安全的,并且可能会产生多字节字符集的意外结果。此外,这些运算符通过字节值比较字符,即使给定的排序规则将重音字符视为相等,重音字符也可能无法比较。
我想知道最好使用LIKE进行unicode模式匹配,使用regexp进行ASCII增强模式匹配吗?
是的,那是最好的。
我喜欢能够在字符串的开头或结尾搜索匹配的想法,但如果regexp不支持unicode,那么如果我的文本是unicode则可能很难。
也可以使用LIKE
来做到这一点:
WHERE foo LIKE 'bar%'
和
WHERE foo LIKE '%bar'
答案 1 :(得分:1)
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