有谁知道 MySQL 的 utf8_unicode_cs 排序规则是否存在?到目前为止,我的搜索已经枯竭。如果它根本不存在,那么创建一个是否相当简单?或者以某种方式使用 utf8_unicode_ci 或 utf8_bin 但“模拟”人们对 utf8_unicode_cs 排序规则的期望?
问问题
3397 次
2 回答
12
我遇到了同样的问题,经过一些谷歌搜索,似乎 MySQL 不包含它。正如你所说,“模拟它”,
1)为了确保在数据库中区分大小写:将表列设置为utf8_bin
排序规则
这允许:
- 严格的选择:
SELECT "Joe"
不会返回带有“joe”/“joE”/“jOe”/等的行 - 严格的 UNIQUE 索引:具有 UNIQUE 索引的列会将大小写差异视为不同的值。例如,如果使用 utf8_unicode_ci 排序规则,在已经有“joe”的表上插入“Joe”将触发“重复键”错误。如果使用 ut8_bin,插入“Joe”就可以了。
2)要获得正确的结果排序:将排序规则添加到 SQL 查询中:
SELECT ... ORDER BY column COLLATE utf8_unicode_ci
于 2013-04-10T03:26:20.953 回答
2
这是一个老问题,但似乎没有被任何其他问题所取代,所以我认为值得发布事情已经改变。
MySQL 版本 8 现在具有以下 utf8mb4 排序规则:
utf8mb4_0900_ai_ci
utf8mb4_0900_as_ci
utf8mb4_0900_as_cs
... and many language-specific variants of same.
(据我所知,没有 _ai_cs,但这在任何情况下都不太有用:很少有理由将 [a] 和 [a-acute] 分组,然后将 [A] 和 [A-acute] 分别分组)。
utf8mb4_0900_as_cs 实现了原始问题假设的“utf8_unicode_cs”的目的。(0900 表示它使用 Unicode v 9.0.0,而不是 utf8_unicode_ci 使用的 4.0.0。)
要使用这些,您需要将字段从 utf8 更改为 utf8mb4 字符集 - 但这通常是一个好主意,因为旧的 3-byte-max 编码无法处理例如表情符号和其他非 BMP 字符。
来源:https ://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html
于 2018-12-21T07:12:37.920 回答