MySQL将ÅÄÖ视为AAO?

Mar*_*tin 31 mysql unicode encoding collation

这两个查询给了我完全相同的结果:

select * from topics where name='Harligt';
select * from topics where name='Härligt';
Run Code Online (Sandbox Code Playgroud)

这怎么可能?看起来像mysql在搜索时将åäö翻译成aao.有什么办法可以解决这个问题吗?

据我所知,我到处都使用utf-8编码.终端和php都会出现同样的问题.

Pek*_*ica 36

是的,这是非语言特定的unicode排序规则中的标准行为.

9.1.13.1.Unicode字符集

为了进一步说明,在utf8_general_ci和utf8_unicode_ci中都存在以下等式(对于比较或执行搜索时的效果,请参见第9.1.7.7节"排序效果的示例"):

Ä=AÖ=OÜ= U.

另请参见整理效果的示例

你需要

如果你想要做一个区分大小写变得更加困难LIKE,但具有Ä = A变音功能.我知道没有不区分大小写的mySQL排序规则并且不会进行这种隐式变音转换.如果有人知道,我有兴趣听到它.

有关:


Mar*_*ers 5

由于你在瑞典,我建议使用瑞典校对.这是一个示例,显示了它的不同之处:

CREATE TABLE topics (name varchar(100) not null) CHARACTER SET utf8;

INSERT topics (name) VALUES ('Härligt');

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

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

ALTER TABLE topics MODIFY name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_swedish_ci;

select * from topics where name='Harligt';
<no results>

select * from topics where name='Härligt';
'Härligt'
Run Code Online (Sandbox Code Playgroud)

请注意,在此示例中,我只将一列更改为Swedish collat​​ion,但您可能应该为整个数据库,所有表,所有varchar列执行此操作.