TiDB | 您所在的位置:网站首页 › ci的汉字怎么写 › TiDB |
一、背景
因为项目所需,字符集需要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 这块确实是个bug,现在也没有解决,而且用dumpling导出数据,迁移到tidb的时候特别注意 CREATE DATABASE `test` DEFAULT CHARACTER SET utf8mb4 collate utf8mb4_general_ci # 这步是为了建一个想要的排序规则的库 # 接下来的操作要在dumpling生成的目录下执行 sed -i "s/\/\*\!40100 DEFAULT CHARACTER SET utf8mb4 \*\//DEFAULT CHARACTER SET utf8mb4 collate utf8mb4_general_ci \/\*\!40100 DEFAULT CHARACTER SET utf8mb4 collate utf8mb4_general_ci \*\//g" *schema-create.sql # 这个操作是为了改建库语句 sed -i "s/DEFAULT CHARSET=utf8mb4//g" *schema.sql # 这个操作是为了把建表语句的DEFAULT CHARSET=utf8mb4这个去掉,要不然有这个还是建的为utf8mb4_bin的表
|
CopyRight 2018-2019 实验室设备网 版权所有 |