如何解决SELECT Hüsby 返回“错误”的输出 Husby
在同一个数据库中,我运行查询并得到一个正确和一个错误的结果。
正确
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
有没有人知道我还可以更改或检查什么?
解决方法
您可以使用 BINARY 进行比较
CREATE TABLE stammdaten (Ort varchar(10)) CHARACTER SET UTF8MB4 COLLATE Utf8mb4_unicode_ci
INSERT INTO stammdaten VALUES('Husby')
SELECT Ort FROM stammdaten WHERE BINARY Ort = BINARY 'Hüsby';
| Ort | | :-- |
dbfiddle here
,您可以查看文档,因为一切都按预期进行:
-
10.3.1 Collation Naming Conventions:“排序规则后缀表示排序规则是区分大小写、区分重音还是区分假名(或它们的某种组合)或二进制。”该表显示后缀
_ci
至少代表“case insensitive”。 - "对于未指定区分重音的非二进制排序规则名称,由区分大小写决定。如果排序规则名称中不包含
_ai
或_as
,_ci
名称暗示_ai
,名称中的_cs
暗示_as
。”因此排序规则utf8mb4_unicode_ci
也对重音不敏感。 - 如果您想要重音敏感但同时区分不敏感,则根据 10.2 Character Sets and Collations in MySQL 选择
utf8mb4_0900_as_ci
。 - 盲目地将列和/或文字转换为
BINARY
类型与应用utf8mb4_bin
排序规则不同,因为它通常带有更多限制。见10.8.5 The binary Collation Compared to _bin Collations。
需要理解Unicode(ü
vs u¨
),需要理解大小写不敏感规则(ß
vs SS
),需要理解重音不敏感(Café
对 cafè
)。否则,您最终会存储数据,因为您选择了错误的排序规则,因此您无法正确查找或过滤这些数据。理解排序也是一个方面(ü
是在 u
之后还是在 ö
之后排序?),尽管很少有人感兴趣。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。