1

我目前正在为网站开发搜索功能。用户按名称搜索其他用户。对于名字上有口音的用户,我很难获得好的结果。

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

目前,如果有人注册该站点,并且名称带有重音符号(例如:Alberto Andrés),则该名称将存储在 DB 中,如下图所示:

阿尔贝托·安德烈斯

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

我可以做些什么来考虑重音记录当前存储在数据库中的方式?

谢谢!

4

1 回答 1

2

在我看来,el Señor André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 列使用相同的字符集。

于 2013-02-08T14:41:08.127 回答