是否存在 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 排序规则?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以让 SQL Server 将排序规则转换为 UTF-8 / UTF-16

URL 排序规则

更改列排序规则

如何使用sql批量生成不重复的有规则数据?

SQLite 自定义函数,聚合,排序规则

Mysql 表排序规则改变