我目前正在为网站开发搜索功能。用户按名称搜索其他用户。我在为名字带有重音的用户上取得好成绩时遇到了一些麻烦。
我在name列上有一个FULLTEXT索引,表的排序规则是utf8_general_ci。
目前,如果某人注册该网站,并且其名称带有重音符号(例如:AlbertoAndrés),则该名称将存储在数据库中,如下图所示:
因此,如果我执行以下查询SELECT * MATCH(name) AGAINST('alberto andres')
,我会得到很多结果,包括更好的匹配分数,如'Alberto','Andres','Andrés',最后匹配得分较低,用户可能正在寻找的记录为'AlbertoAndrés'。
如何考虑重音记录当前存储在数据库中的方式?
谢谢!
答案 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列的字符集相同。