GBK

    本节介绍 TiDB 中 GBK 字符集与 MySQL 的兼容情况。

    MySQL 的字符集默认排序规则是 。与 MySQL 不同,TiDB GBK 字符集的默认排序规则为 gbk_bin。另外,TiDB 支持的 gbk_bin 与 MySQL 支持的 gbk_bin 排序规则也不一致,TiDB 是将 GBK 转换成 UTF8MB4 然后做二进制排序。

    如果要使 TiDB 兼容 MySQL 的 GBK 字符集排序规则,你需要在初次初始化 TiDB 集群时设置 TiDB 配置项new_collations_enabled_on_first_bootstraptrue 来开启。

    开启新的排序规则框架后,如果查看 GBK 字符集对应的排序规则,你可以看到 TiDB GBK 默认排序规则已经切换为 gbk_chinese_ci

    • 在系统变量 和 character_set_connection 不同时设置为 gbk 的情况下,TiDB 处理非法字符的方式与 MySQL 一致。
      • MySQL 处理非法 GBK 字符集时,对读和写操作的处理方式不同。
      • TiDB 处理非法 GBK 字符集时,对读和写操作的处理方式相同。TiDB 在严格模式下读写非法 GBK 字符都会报错,在非严格模式下,读写非法 GBK 字符都会用 ? 替换。

    例如,当 SET NAMES gbk 时,如果分别在 MySQL 和 TiDB 上通过 CREATE TABLE gbk_table(a VARCHAR(32) CHARACTER SET gbk) 语句建表,然后按照下表中的 SQL 语句进行操作,就能看到具体的区别。

    说明:该表中 SELECT HEX('一a');utf8mb4 字节集下的结果为 e4b88061

    • TiDB 不支持使用 _gbk, 比如:

    组件兼容性

    • TiCDC 和 TiFlash 目前不支持 GBK 字符集。

    • TiDB Data Migration (DM) 在 v5.4.0 之前不支持将 charset=GBK 的表迁移到 TiDB。

    • TiDB Backup & Restore(BR)在 v5.4.0 之前不支持恢复 charset=GBK 的表。另外,任何版本的 BR 都不支持恢复 的表到 5.4.0 之前的 TiDB 集群。