这两个查询为我提供了完全相同的结果:
select * from topics where name='Harligt'; select * from topics where name='Härligt';
这怎么可能?好像mysql在搜索时将åäö转换为aao。有什么办法可以关闭此功能吗?
据我所知,我到处都使用utf-8编码。从终端和php都发生相同的问题。
是的,这是非语言特定Unicode归类中的标准行为。
9.1.13.1。Unicode字符集
为了进一步说明,utf8_general_ci和utf8_unicode_ci中都具有以下相等性(有关比较或搜索时的效果,请参见第9.1.7.7节“排序规则的效果示例”): Ä= AÖ= OÜ= U
为了进一步说明,utf8_general_ci和utf8_unicode_ci中都具有以下相等性(有关比较或搜索时的效果,请参见第9.1.7.7节“排序规则的效果示例”):
Ä= AÖ= OÜ= U
另请参阅整理效果的示例
你需要
使用不具有此“功能”的排序规则(即utf8_bin,但有其他后果)
utf8_bin
仅对查询 使用其他排序规则。这应该工作:
select * from topics where name='Harligt' COLLATE utf8_bin;
如果您不区分大小写LIKE但 不 进行Ä = A变音符号转换,则会变得更加困难。我不知道不区分大小写的mySQL排序规则,并且不执行这种隐式变音符号转换。如果有人认识我,我很想听听。
LIKE
Ä = A
有关: