写过很多次了,Opencart的基本搜索还不够好。好吧,我遇到了这个问题:
当客户在我的国家(斯洛伐克 (UTF8((搜索产品时,他可能不会使用变音符号。所以他/她写下了"cucoriedka",但一无所获。
但是,数据库中有一个名为"čučoriedka"的产品,我也希望它显示出来,因为这就是他正在寻找的。
您知道如何获得这项工作吗?越简单越好!
我对斯洛伐克语一无所知,对不起。但是斯洛伐克语排序规则utf8_slovak_ci
将斯洛伐克字母č
与c
区别对待。(在您的电话簿中,以 Č 开头的姓氏是否都在以 C 开头的姓氏之后?他们可能会这样做。MySQL的创建者当然认为他们这样做。
排序规则utf8_general_ci
č
和c
相同。这是一个 sql 小提琴演示了这一切。http://sqlfiddle.com/#!9/46c0e/1/0
如果将包含产品名称的列的排序规则更改为 utf8_general_ci
,您将获得一个更适合搜索的表格。 假设您的表称为 product
,其中具有该名称的列称为 product_name
。 然后,此SQL数据定义语句将根据需要转换列。您应该查找列的实际数据类型,而不是像我在本例中所做的那样使用 varchar(nnn)
。
alter table product modify product_name varchar(nnn) collate utf8_general_ci
如果无法更改表,则可以将 WHERE 子句更改为如下所示,并显式指定排序规则。
WHERE 'userInput' COLLATE utf8_general_ci = product_name
但这比更改列排序规则的搜索速度要慢。
您可以使用MySQL的SOUNDEX()
或SOUNDS LIKE
函数。
这些函数比较语音。
除英语外,soundex的准确性值得怀疑。但是,如果我们像这样使用它,它可以得到改进
select soundex('ball')=soundex('boll') from dual
也可以使用SOUNDS LIKE
。
结合使用SOUNDEX()
和SOUNDS LIKE
将提高准确性。
有关详细信息,请参阅 MySQL 文档或 mysql-sounds-like-and-soundex