3

如果我想用字段中的字符串搜索所有数据léonname我使用这样的查询:

SELECT * FROM `my_table` WHERE `name` REGEXP 'léon' 

这个请求没问题。

现在,我需要使用字符串léonor检索所有行leonlèon所以我尝试了:

SELECT * FROM `my_table` WHERE `name` REGEXP 'l[éeè]on' 

此查询不起作用...我没有错误,但没有结果。你有什么想法?

4

2 回答 2

2

MySQL 的正则表达式不能可靠地处理多字节字符集

但是,如果您使用的是 UTF-8,则可以改为使用不区分重音LIKE=搜索,这看起来可能是您真正想要的。

于 2013-05-03T13:52:20.207 回答
0

文档:

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

您可以尝试像这样处理多字节字符,以便处理 1 个字节或 2 个字节。这并不完美,因为它会匹配例如“lion”,但可能会让您更接近。

REGEXP 'l.{1,2}on'

可能影响您的另一件事是 REGEXP 在 MySQL 中的工作方式是末尾有隐含的通配符,因为您没有指定开头和结尾,所以

REGEXP 'l[éeè]on' 

相当于

REGEXP '^.*l[éeè]on.*$' 

这意味着您匹配的结果可能比您预期的要多。听起来你的问题是我提到的第一个场景

于 2013-05-03T13:24:06.490 回答