关于mysql:是否存在utf8_unicode_cs排序规则?

Does a utf8_unicode_cs collation exist?

有人知道mysql的utf8-unicode-cs排序规则是否存在吗?到目前为止,我的搜索已经干涸了。如果它还不存在,那么创造一个它是否相当直接?或者以某种方式使用utf8-unicode-ci或utf8-bin,但是"模拟"一个utf8-unicode-cs排序规则会得到什么?


我也遇到了同样的问题,在谷歌搜索之后,MySQL似乎没有包含它。如你所说的"模拟它"

1)为保证数据库区分大小写,将表列设置为utf8_bin排序规则。这允许:

  • 严格选择:SELECT"Joe"不返回带有"joe"/"joe"/"joe"等的行
  • 严格唯一索引:具有唯一索引的列将大小写差异视为不同的值。例如,如果使用utf8_unicode_ci排序规则,则在已经有"joe"的表上插入"joe"将触发"duplicate key"错误。如果使用了ut8_-bin,插入"joe"就可以了。

2)要获得正确的结果排序,请将排序规则添加到SQL查询中:

1
SELECT ... ORDER BY column COLLATE utf8_unicode_ci

这是一个古老的问题,但似乎没有被任何其他问题所取代,所以我认为值得一提的是事情已经改变了。

MySQL版本8现在具有以下utf8mb4排序规则:

1
2
3
4
 utf8mb4_0900_ai_ci
 utf8mb4_0900_as_ci
 utf8mb4_0900_as_cs
 ... and many language-specific variants of same.

(据我所知,没有,但在任何情况下都没那么有用:很少有理由将[A]和[A-急性]分组,然后分别将[A]和[A-急性]分组。

原始问题假设的"utf8_unicode_cs"的目的是由utf8mb4_0900_as_cs实现的。(0900表示它使用的是Unicode v 9.0.0,而不是utf8_unicode_ci使用的4.0.0。)

要使用这些字符集,您需要将字段从utf8更改为utf8mb4字符集,但这通常是一个好主意,因为旧的3字节最大编码无法处理例如emoji和其他非bmp字符。

来源:https://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html