我在 MySQL 中对多字节编码(utf-8)数据使用正则表达式,但我需要它不区分大小写。由于 MySQL 存在无法正确处理匹配多字节编码字符串不区分大小写的错误(多年未解决),我试图通过小写值和正则表达式模式来模拟“不敏感”。以这种方式小写正则表达式模式是否安全?我的意思是,有没有我忘记的边缘情况?
跟随会导致任何问题吗?
LOWER('šárKA') = REGEXP LOWER('^Šárka$')
更新:我将问题编辑得更具体。
REGEXP 和 RLIKE 运算符以字节方式工作,因此它们不是多字节安全的,并且可能会在使用多字节字符集时产生意外结果。此外,这些运算符通过它们的字节值比较字符,即使给定的排序规则将它们视为相等,重音字符也可能不会比较为相等。
这是他们在 2007 年提交的错误,直到现在仍未解决。但是,我不能只更改数据库来解决这个问题。我需要 MySQL 以某种方式考虑 'Š' 等于 'š',即使它是通过使用不太优雅的解决方案来破解它。重音(多字节)以外的其他字符匹配良好且没有问题。