微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SELECT Hüsby 返回“错误”的输出 Husby

如何解决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 ),需要理解大小写不敏感规则(ß vs SS),需要理解重音不敏感(Cafécafè)。否则,您最终会存储数据,因为您选择了错误的排序规则,因此您无法正确查找或过滤这些数据。理解排序也是一个方面(ü 是在 u 之后还是在 ö 之后排序?),尽管很少有人感兴趣。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。