一、背景
因为项目所需,字符集需要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