【发布时间】:2013-05-17 07:22:09
【问题描述】:
我在 MySQL 中对多字节编码 (utf-8) 数据使用正则表达式,但我需要它不区分大小写。由于 MySQL 存在无法正确处理匹配多字节编码字符串不区分大小写的错误(多年未解决),我试图通过小写值和正则表达式模式来模拟“不区分大小写”。以这种方式小写正则表达式模式是否安全?我的意思是,有没有我忘记的边缘情况?
以下会导致任何问题吗?
LOWER('šárKA') = REGEXP LOWER('^Šárka$')
更新:我将问题编辑得更具体。
REGEXP 和 RLIKE 运算符以字节方式工作,因此它们不是多字节安全的,并且可能会在使用多字节字符集时产生意想不到的结果。此外,这些运算符通过字节值比较字符,并且重音字符可能不会比较为相等,即使给定的排序规则将它们视为相等。
它是their bug filed in 2007,直到现在仍未解决。但是,我不能只更改数据库来解决这个问题。我需要 MySQL 以某种方式考虑 'Š' 等于 'š',即使它是通过使用不那么优雅的解决方案来破解它。重音(多字节)以外的其他字符匹配良好且没有问题。
【问题讨论】:
-
其中Langugae。您可以使用语言特定的方法,
-
我将问题更新为更具体。
-
你确定正则表达式是最好的工具吗?我知道问题中的代码只是一个示例,但大多数时候您可以使用
LIKE。 -
我的应用程序接受正则表达式作为用户的输入,所以没有其他办法了。
标签: mysql regex case-sensitive case-insensitive