在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