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(ü
与 u¨
),需要理解不区分大小写的规则(ß
与 SS
),并且需要理解不区分重音的规则被理解 (Café
versus cafè
)。否则,您最终会存储无法正确查找或过滤的数据,因为您选择了错误的排序规则。理解排序也是一个方面(ü
是在 u
之后还是在 ö
之后排序?),尽管很少有人感兴趣。
在同一个数据库中,我运行查询得到一个正确的结果和一个错误的结果。
正确
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(ü
与 u¨
),需要理解不区分大小写的规则(ß
与 SS
),并且需要理解不区分重音的规则被理解 (Café
versus cafè
)。否则,您最终会存储无法正确查找或过滤的数据,因为您选择了错误的排序规则。理解排序也是一个方面(ü
是在 u
之后还是在 ö
之后排序?),尽管很少有人感兴趣。