SELECT Hüsby returns 'wrong' 输出 Husby

SELECT Hüsby returns the 'wrong' output 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

table : 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 |
| :-- |

db<>fiddle here

您可以查看文档,因为一切都按预期工作:

  • 10.3.1 Collation Naming Conventions: "排序规则后缀表示排序规则是区分大小写、区分重音、区分假名(或它们的某种组合)还是二进制。”,table表示后缀_ci至少代表“case insensitivity”。
  • "对于未指定重音区分的非二进制排序规则名称,由区分大小写决定。如果排序规则名称不包含_ai_as,[=名称中的 10=] 意味着 _ai 并且名称中的 _cs 意味着 _as." 所以排序规则 utf8mb4_unicode_ci 也是 重音不敏感.
  • 如果你想要重音 敏感度 但同时需要大小写 不敏感 然后根据 [=31= 选择 utf8mb4_0900_as_ci ].
  • 盲目地将列 and/or 文字转换为 BINARY 类型与应用 utf8mb4_bin 排序规则不同,因为它通常有更多限制。参见 10.8.5 The binary Collation Compared to _bin Collations

需要理解 Unicode(ü),需要理解不区分大小写的规则(ßSS),并且需要理解不区分重音的规则被理解 (Café versus cafè)。否则,您最终会存储无法正确查找或过滤的数据,因为您选择了错误的排序规则。理解排序也是一个方面(ü 是在 u 之后还是在 ö 之后排序?),尽管很少有人感兴趣。