是否存在 utf8_unicode_cs 排序规则?
Posted
技术标签:
【中文标题】是否存在 utf8_unicode_cs 排序规则?【英文标题】:Does a utf8_unicode_cs collation exist? 【发布时间】:2013-02-19 12:23:21 【问题描述】:有谁知道 mysql 的 utf8_unicode_cs 排序规则是否存在?到目前为止,我的搜索已经枯竭。如果它根本不存在,那么创建一个是否相当简单?或者以某种方式使用 utf8_unicode_ci 或 utf8_bin 但“模拟”人们对 utf8_unicode_cs 排序规则的期望?
【问题讨论】:
【参考方案1】:我遇到了同样的问题,在谷歌搜索后,似乎 MySQL 不包含它。正如你所说,“模拟它”,
1) 为确保数据库区分大小写:将表列设置为utf8_bin
排序规则
这允许:
SELECT "Joe"
不会返回带有“joe”/“joE”/“jOe”/等的行
严格的唯一索引:具有唯一索引的列会将大小写差异视为不同的值。例如,如果使用 utf8_unicode_ci 排序规则,在已经有“joe”的表上插入“Joe”将触发“重复键”错误。如果使用 ut8_bin,插入“Joe”就可以了。
2) 要获得正确的结果排序:将排序规则添加到 SQL 查询中:
SELECT ... ORDER BY column COLLATE utf8_unicode_ci
【讨论】:
【参考方案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] 分别分组)。
原始问题假设的“utf8_unicode_cs”的目的由 utf8mb4_0900_as_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
【讨论】:
以上是关于是否存在 utf8_unicode_cs 排序规则?的主要内容,如果未能解决你的问题,请参考以下文章