使用MySQL的REGEXP无法正常工作

时间:2013-05-03 13:08:51

标签: mysql sql regex

如果我想在léon字段中使用字符串name搜索所有数据,我会使用如下查询:

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

此请求没问题。

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

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

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

2 个答案:

答案 0 :(得分:2)

MySQL的正则表达式don't work reliably with multibyte character sets

但是,如果你使用的是UTF-8,你可以使用accent insensitive LIKE and = searches,看起来它可能就是你真正想要的东西。

答案 1 :(得分:0)

来自docs:

  

REGEXP和RLIKE运算符以字节方式工作,因此它们是   不是多字节安全的,并且可能会产生多字节的意外结果   字符集。另外,这些运算符比较字符   它们的字节值和重音字符可能无法相等   即使给定的校对将它们视为平等。

您可以尝试处理多字节字符,因此处理1个字节或2.它不会是完美的,因为它会匹配“狮子”,例如,但可能会让你更接近。

REGEXP 'l.{1,2}on'

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

REGEXP 'l[éeè]on' 

相当于

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

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