执行重音不敏感的全文搜索MySQL

时间:2013-02-08 14:13:38

标签: php mysql utf-8 full-text-search diacritics

我目前正在为网站开发搜索功能。用户按名称搜索其他用户。我在为名字带有重音的用户上取得好成绩时遇到了一些麻烦。

我在name列上有一个FULLTEXT索引,表的排序规则是utf8_general_ci。

目前,如果某人注册该网站,并且其名称带有重音符号(例如:AlbertoAndrés),则该名称将存储在数据库中,如下图所示:

Alberto Andrés

因此,如果我执行以下查询SELECT * MATCH(name) AGAINST('alberto andres'),我会得到很多结果,包括更好的匹配分数,如'Alberto','Andres','Andrés',最后匹配得分较低,用户可能正在寻找的记录为'AlbertoAndrés'。

如何考虑重音记录当前存储在数据库中的方式?

谢谢!

1 个答案:

答案 0 :(得分:2)

在我看来,elSeñorAndrés的姓氏实际上是正确存放的。您向我们展示的渲染是一些非UTF应用程序破坏UTF8文本的方式。

如果您的表中还没有一大堆记录,则可以尝试对查询进行此修改。全文(非布尔)模式在小数据集上很奇怪。

SELECT *  
  FROM TABLE
WHERE MATCH(name) AGAINST('alberto andres' IN BOOLEAN MODE)

您也可以尝试

SELECT *  
  FROM TABLE
WHERE MATCH(name) AGAINST(CONVERT('alberto andres' USING utf8))

只是为了确保你的匹配字符串与MySQL列的字符集相同。