tidb字符集-排序规则

用utf8_bin是不是同样数据占用存储会增多?

Hi,请注意通常而言,存储的占用只与字符集相关,与排序规则是无关的,因此可以认为 utf8_general_cs 与 utf8_bin 是一样的,因为他们都属于 utf8 字符集。

然而,以上的说法只适用于 MySQL;对于 TiDB 而言,由于底层的存储 layout 是 Key-Value(TiKV),出于性能考虑,索引编码是 mem-comparable bytes,因此在 索引 的存储上,占用的空间是与排序规则相关的。

再然而(- -),在 TiDB 4.0 之前,TiDB 实际上仅支持一种排序规则(utf8_bin),其他被允许制定的排序规则,例如 utf8_general_ci、utf8_unicode_ci…都可以写,但全部当作 utf8_bin 处理。

在 TiDB 4.0 之后,我们支持了 CI Collation 以满足一些用户对于大小写不敏感排序规则需求,具体请见文档:https://pingcap.com/docs-cn/dev/reference/sql/characterset-and-collation/

简单总结一下:

  • 如果您对于大小写不敏感的排序规则有强需求,可以打开 TiDB 4.0 的 CI Collation 选项,使用 utf8_general_ci collation
  • 如果没有上述需求,请直接使用 utf8_bin,这也是除 TiDB 4.0 CI Collation 之外,唯一支持的排序规则。
2 个赞