MySQL中的重音不敏感搜索查询

时间:2011-12-27 16:51:50

标签: mysql search diacritics

有没有办法让搜索查询重音不敏感?

列和表的排序规则是utf8_polish_ci,我不想更改它们。

示例词:toruń

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

没有找到“toruń”。我怎么能这样做?

3 个答案:

答案 0 :(得分:20)

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

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

但请注意,在运行时动态更改排序规则会导致mysql使用索引的可能性,因此在大型表上执行可能会非常糟糕。

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

注意 - 确保您的数据库确实具有这些字符而不是html实体。 此外,您的连接的字符集很重要。以上假设它设置为utf8,例如,通过set names utf8set names

如果没有,您需要introducer作为文字值

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

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

答案 1 :(得分:4)

这在极端情况下不起作用,但尝试将列排序规则更改为UFT8 utf8_unicode_ci。然后重音字符将等于他们的非重音字符。

答案 2 :(得分:1)

您可以尝试SOUNDEX:

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

这比较两个字符串的声音。但这显然会带来更多结果。