10

已经写过很多次了,Opencart 的基本搜索还不够好.. 好吧,我遇到了这个问题:

当客户在我的国家(斯洛伐克(UTF8))搜索产品时,他可能不会使用变音符号。所以他/她写下“cucoriedka”却一无所获。

但是,数据库中有一个名为“čučoriedka”的产品,我也希望它显示出来,因为这就是他要找的东西。

你知道如何完成这项工作吗?越简单越好!

4

2 回答 2

5

我对斯洛伐克一无所知,对不起。但斯洛伐克语排序utf8_slovak_ci规则将斯洛伐克语字母čc. (在您的电话簿中,以Č开头的姓氏都在以C开头的姓氏之后吗?他们可能是这样的。MySQL 的创建者当然认为他们是这样的。)

排序规则utf8_general_ci处理čc相同。这是一个展示所有这些的 sql fiddle。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

但这比更改列排序规则搜索起来要慢。

于 2015-08-23T23:01:56.433 回答
0

你可以使用MySQLSOUNDEX()SOUNDS LIKE功能。

这些函数比较语音。

除了英语以外,soundex 的准确性值得怀疑。但是,如果我们像这样使用它,它可以得到改进

select soundex('ball')=soundex('boll') from dual

SOUNDS LIKE也可以使用。

将两者结合使用SOUNDEX()SOUNDS LIKE提高准确性。

请参阅 MySQL 文档以获取详细信息或mysql-sounds-like-and-soundex

于 2015-08-23T22:06:02.357 回答