TiDB-字符集及排序规则(如何支持utf8mb4_general_ci)

一、背景

因为项目所需,字符集需要utf8mb4_general_ci的。试了多种方式都不能达到,即使修改了建表语句,显示指定建表语句为utf8mb4_general_ci,也不能达到大小写不敏感的效果,所以开始翻阅资料,终于找到原因

 

二、原因

TiDB 4.0 新增了完整的排序规则支持框架,从语义上支持了排序规则,并新增了配置开关 new_collations_enabled_on_first_bootstrap,在集群初次初始化时决定是否启用新排序规则框架。在该配置开关打开之后初始化集群,可以通过 mysql.tidb 表中的 new_collation_enabled 变量确认是否启用新排序规则框架:

SELECT VARIABLE_VALUE FROM mysql.tidb WHERE VARIABLE_NAME='new_collation_enabled';

如果为True则开启了新框架

 

三、修正方式

1.首先尝试编辑配置文件,重新载入配置文件

1.1 编辑配置文件

tiup cluster edit-config ${cluster-name}

1.2 加入对应参数

server_configs:
  tidb:
    # 开启支持大小写不敏感, 只有在集群初始化时配置才生效, 默认 false
    new_collations_enabled_on_first_bootstrap: true

1.3 载入新的配置

tiup cluster reload ${cluster-name} [-N ][-R ] (-N 后面接的是节点,-R后面接的是组件名称)

eg:

tiup cluster reload test-cluster -R tidb

tiup cluster reload test-cluster -N 192.168.1.1:4000

1.4 结果

重新载入后发现新的配置并没有生效

2.毁掉集群,重新搭建

2.1 备份数据(有备无患,用mydumper或者dumpling都行)

2.2 停止集群服务

tiup cluster stop tidb-test(集群名称)

2.3 编辑配置文件

vi topology.yaml

在指定位置添加如下内容

server_configs:
  tidb:
    # 开启支持大小写不敏感, 只有在集群初始化时配置才生效, 默认 false
    new_collations_enabled_on_first_bootstrap: true

2.4 毁掉集群

tiup cluster destroy tidb-test

2.5 重新部署集群

tiup cluster deploy tidb-test v4.0.0 topology.yaml --user tidb 

2.6 启动集群

tiup cluster start tidb-test

2.7 结果

发现新的排序规则框架已经开启了

四、限制

目前无法支持全局设置utf8mb4_general_ci,需要在建库的时候显式指定,可能是个bug

上一篇:使用 TiUP cluster 在单机上安装TiDB


下一篇:TiDB-遇到manifest 签名过期导致扩容TiKV失败问题解决方案