有谁知道 Mysql 的正则表达式是否支持 unicode?我一直在做一些研究,大多数博客等似乎表明存在问题或不受支持。我想知道是否最好使用 LIKE 进行 unicode 模式匹配和 regexp 进行 ASCII 增强模式匹配?
我喜欢能够在字符串的开头或结尾搜索匹配项的想法,但是如果 regexp 不支持 unicode,那么如果我的文本是 unicode,这可能会很困难。
3 回答
有谁知道 Mysql 的正则表达式是否支持 unicode?我一直在做一些研究,大多数博客等似乎表明存在问题或不受支持。
如正则表达式中所述:
警告
REGEXP
and运算符以RLIKE
字节方式工作,因此它们不是多字节安全的,并且可能会产生与多字节字符集有关的意外结果。此外,这些运算符通过字节值比较字符,即使给定的排序规则将它们视为相等,重音字符也可能不会比较相等。我想知道是否最好使用 LIKE 进行 unicode 模式匹配和 regexp 进行 ASCII 增强模式匹配?
是的,那将是最好的。
我喜欢能够在字符串的开头或结尾搜索匹配项的想法,但是如果 regexp 不支持 unicode,那么如果我的文本是 unicode,这可能会很困难。
也可以这样做
LIKE
:WHERE foo LIKE 'bar%'
和:
WHERE foo LIKE '%bar'
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 位字符集。
从 Mysql 8.0 开始,支持 unicode 匹配
另请参阅有关兼容性问题的文档