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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

是否有任何方法使搜索查询重音变得不敏感?

列的排序规则和表的排序规则是UTF 8,我不想改变他们。

示例词:Toru

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

它没有找到“Toru”。我该怎么做?

提问于
用户回答回答于

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

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

但是请注意,在运行时动态更改排序规则将放弃MySQL使用索引的可能性,因此大型表的性能可能很糟糕。

或者,可以将该列复制到另一列,如searchable_title,但是要改变上面的校对。实际上,做这类事情是很常见的,在这种情况下,您可以复制数据,但是以某种稍微不同的形式对其进行优化,以适应特定的工作负载/目的。您可以使用触发器作为保持重复列同步的好方法。如果索引的话,此方法有可能执行良好的操作。

注意-确保你的db确实具有这些字符,而不是html实体。另外,连接的字符集也很重要。上面的假设假设它被设置为UTF 8,例如,集名就像set names utf8

如果不是,你需要一个引荐者对于文字值

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

当然,单引号中的值实际上必须是UTF 8编码的,即使SQL查询的其余部分没有编码。

用户回答回答于

这在极端情况下行不通,但尝试将列排序规则更改为UFT 8。utf8_unicode_ci然后重音字符将等于他们的非重音对应。

扫码关注云+社区