12

有谁知道 MySQL 的 utf8_unicode_cs 排序规则是否存在?到目前为止,我的搜索已经枯竭。如果它根本不存在,那么创建一个是否相当简单?或者以某种方式使用 utf8_unicode_ci 或 utf8_bin 但“模拟”人们对 utf8_unicode_cs 排序规则的期望?

4

2 回答 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 回答