TiDB 您所在的位置:网站首页 ci的汉字怎么写 TiDB

TiDB

2024-06-26 22:28| 来源: 网络整理| 查看: 265

一、背景

因为项目所需,字符集需要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 实验室设备网 版权所有