在同一个数据库中,我运行查询并得到一个正确的结果和一个错误的结果。
正确
SELECT Ort FROM `stammdaten` WHERE `Ort` = 'Husby';
Ort
Husby
Husby
错了
SELECT Ort FROM stammdaten WHERE Ort = 'Hüsby';
Ort
Husby
Husby
数据库:utf8mb4_unicode_ci
表:utf8mb4_unicode_ci
字段:utf8mb4_unicode_ci
有人知道我还可以更改或检查什么吗?
您可以查看文档,因为一切都按预期工作:
_ci
至少代表“case insensitivity”。
_ai
或
_as
,则名称中的
_ci
意味着
_ai
和
_cs
名称中暗示了
_as
。”因此排序规则
utf8mb4_unicode_ci
也不区分重音。
选择
utf8mb4_0900_as_ci
。
BINARY
类型与应用
utf8mb4_bin
排序规则不同,因为它通常带有更多限制。请参阅10.8.5 二进制排序规则与 _bin 排序规则的比较。
ü
与
u¨
),需要理解不区分大小写规则(
ß
与
SS
),需要理解重音不敏感(
Café
与 cafè
) )。否则,您最终会存储无法正确查找或过滤的数据,因为您选择了错误的排序规则。理解排序也是一个方面(ü
是在
u
之后排序还是在
ö
之后排序?),尽管很少有人感兴趣。
https://mysql.rjweb.org/utf8mb4_collations.html看到匈牙利语和土耳其语将ü
视为
u
和
v
之间的单独字母。如果这是您需要的,请切换到 utf8mb4_hu_0900_ai_ci 或 utf8mb4_tr_0900_ai_ci。可能
ALTER TABLE ... CONVERT TO COLLATION utf8mb4_hu_0900_ai_ci;
就足够了。注意:需要对所有在此类字符串上为
JOINed
的表执行此操作,并且它也会转换所有非 UTF-8 列。因此,请在单独的环境中进行测试。如果
CONVERT TO
太像大锤了,那么请考虑
ALTER TABLE ... MODIFY col ...
,但一定要包括该列的其他属性。