我正在研究一个简单的搜索脚本,它可以查看特定表的两列。基本上我正在寻找公司号码或他们的名字之间的匹配。我在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,你是我唯一的希望! :)
答案 0 :(得分:3)
我将为你提供另一个答案。
我刚刚读到utf8_general_ci
对重音不敏感所以你应该没问题。
一种解决方案是使用
mysql_query("SET NAMES 'utf8'");
这告诉客户端在什么字符集中发送SQL语句。
另一个解决方案似乎是使用MySQL的HEX()
函数将重音字符转换为其十六进制值。但是我找不到任何好的工作示例,在阅读了HEX()
的MySQL文档之后,看起来它可能无法正常工作。
答案 1 :(得分:0)
您可能应该考虑将问题字符转换为英语对应字符,然后将它们存储在不同的列中,可能称为searchable
或类似。每当主列更新时,您都需要更新它。
然后你会有两列,一列包含重音字符,另一列包含普通英语可搜索内容。