一尘不染

MySQL将ÅÄÖ视为AAO?

mysql

这两个查询为我提供了完全相同的结果:

select * from topics where name='Harligt';
select * from topics where name='Härligt';

这怎么可能?好像mysql在搜索时将åäö转换为aao。有什么办法可以关闭此功能吗?

据我所知,我到处都使用utf-8编码。从终端和php都发生相同的问题。


阅读 239

收藏
2020-05-17

共1个答案

一尘不染

是的,这是非语言特定Unicode归类中的标准行为。

9.1.13.1。Unicode字符集

为了进一步说明,utf8_general_ci和utf8_unicode_ci中都具有以下相等性(有关比较或搜索时的效果,请参见第9.1.7.7节“排序规则的效果示例”):

Ä= AÖ= OÜ= U

另请参阅整理效果的示例

你需要

  • 使用不具有此“功能”的排序规则(即utf8_bin,但有其他后果)

  • 仅对查询 使用其他排序规则。这应该工作:

    select * from topics where name='Harligt' COLLATE utf8_bin;
    

如果您不区分大小写LIKE 进行Ä = A变音符号转换,则会变得更加困难。我不知道不区分大小写的mySQL排序规则,并且不执行这种隐式变音符号转换。如果有人认识我,我很想听听。

有关:

2020-05-17