InnoDB MySQL表中的重音不敏感搜索!

时间:2010-08-31 17:43:19

标签: php mysql diacritics collation

我正在研究一个简单的搜索脚本,它可以查看特定表的两列。基本上我正在寻找公司号码或他们的名字之间的匹配。我在SQL中使用LIKE语句,因为我使用的是InnoDB表(这意味着没有全文搜索)。

问题是我在双语环境(法语和英语)工作,而法语中的一些人物有口音。我希望重音字符被认为与他们的非重音字符相同,换句话说é= e,e =é,à= a等。所以有很多关于这个问题的问题,但似乎都没有工作对我来说。

这是我的SQL语句:

SELECT id, name FROM clients WHERE id LIKE '%éc%' OR name LIKE '%éc%';

我希望找到“école”和“ecole”,但它只能找到“école”。

我还要注意我的表格都是utf8_general_ci。

帮我StackOverflow,你是我唯一的希望! :)

2 个答案:

答案 0 :(得分:3)

我将为你提供另一个答案。

我刚刚读到utf8_general_ci对重音不敏感所以你应该没问题。

一种解决方案是使用

 mysql_query("SET NAMES 'utf8'"); 

这告诉客户端在什么字符集中发送SQL语句。

另一个解决方案似乎是使用MySQL的HEX()函数将重音字符转换为其十六进制值。但是我找不到任何好的工作示例,在阅读了HEX()的MySQL文档之后,看起来它可能无法正常工作。

答案 1 :(得分:0)

您可能应该考虑将问题字符转换为英语对应字符,然后将它们存储在不同的列中,可能称为searchable或类似。每当主列更新时,您都需要更新它。

然后你会有两列,一列包含重音字符,另一列包含普通英语可搜索内容。