create table lang(t varchar(200), FULLTEXT INDEX(t));
insert into lang values ('Türkçe');
insert into lang values ('Turkce');
mysql> select * from lang;
+--------+
| t |
+--------+
| Türkçe |
| Turkce |
+--------+
2 rows in set (0.00 sec)
mysql> select * from lang where t like '%Turkce%';
+--------+
| t |
+--------+
| Türkçe |
| Turkce |
+--------+
2 rows in set (0.00 sec)
2条答案
按热度按时间vh0rcniy1#
ix0qys7i2#
你有几个选择。
最简单的方法是,如果它对您正常工作的话,将全文索引中涉及的列的mysql排序规则设置为
utf8mb4_unicode_ci
(或utf8_unicode_ci
). 如果您的列已经使用unicode编码,那么这样做不会丢失数据。不区分大小写_ci
编码将许多带有分音符的字符视为其未加修饰的对应字符。但是这种排序规则最适用于西欧语言,比如瑞典语(mysql开发人员的国家)。试试看。请告诉我们土耳其语的效果如何。如果不起作用,请尝试为要搜索的每一列存储两列。一个应该包含实际值,另一个应该包含搜索slug值。您可以使用自己创建的存储函数从实际值计算搜索slug值。然后,在search slug列上创建全文索引。
无论何时搜索,都要将用户提供的搜索词转换为其对应的search slug并进行搜索。
search slug stored函数转换带有如下字符的日志
ç
像这样朴素的人c
. 下面是一些关于创建存储函数的想法。如何删除mysql中的重音符号?soundex对你来说毫无价值。它是几十年前发明的,当时计算机有数千个存储位置,专门用于查找北美的专有名称。