在MySQL中对口音不敏感的搜索查询

有什么办法让搜索查询不区分重音?

列和表的整理是utf8_polish_ci,我不想改变它们。

例如单词:toruń

select * from pages where title like '%torun%'

它找不到“toruń”。 我怎样才能做到这一点?


您可以在运行时更改sql查询中的排序规则,

...where title like '%torun%' collate utf8_general_ci

但是要注意,在运行时改变排序规则会放弃使用索引的可能性,所以在大型表上的性能可能会很糟糕。

或者,您可以将该列复制到另一列,例如searchable_title ,但在其上更改排序规则。 做这种类型的东西实际上很常见,您可以在其中复制数据,但它的形式稍有不同,可以针对某些特定工作负载/目的进行优化。 您可以使用触发器作为保持重复列同步的好方法。 如果编入索引,此方法可能会表现良好。

注意 - 确保你的数据库确实有这些字符而不是html实体。 另外,连接的字符集很重要。 上面假设它被设置为utf8,例如,通过设置名称如set names utf8

如果没有,你需要一个介绍人的文字价值

...where title like _utf8'%torun%' collate utf8_general_ci

当然,即使其余的sql查询不是,单引号中的值实际上也必须是utf8编码。


这种方法在极端情况下无法正常工作,但尝试将列整理更改为UFT8 utf8_unicode_ci 。 然后重音字符将等于它们的非重音对应字符。


你可以试试SOUNDEX:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

这通过他们的声音来比较两个字符串。 但是,这显然带来了更多的结果。

链接地址: http://www.djcxy.com/p/95195.html

上一篇: Accent insensitive search query in MySQL

下一篇: Nginx install module from source, after it been installed from repository