TiDB v4.0.5 修改排序规则为utf8_general_ci

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.5
  • 【问题描述】:已经开启了 new_collations_enabled_on_first_bootstrap 参数,请问如何设置默认的排序规则 为utf8_general_ci
    我们要将 500 多个表恢复到新搭的 v4.0.5 tidb 集群中。SQL文件中,表结构没有指定排序规则, 我们想恢复过去的表的排序规则都为 utf8_general_ci 排序规则 ,但我尝试多次,通过 set global collation_database = utf8_general_ci 并不生效,所以请问下 ,如何修改默认排序规则。感谢~

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

可以参考下文档中的规则,检查下导出的表结构是否已经限定了排序规则?

https://docs.pingcap.com/zh/tidb/stable/character-set-and-collation#排序规则支持

CHARACTER SET charset_nameCOLLATE collation_name 都未指定
麻烦看下我下边的测试, 我通过 set global variables 设定了字符集和排序规则


image

但是我在创建没有指定字符集和排序规则的表和库的时候,依然没有使用默认的 utf8_general_ci 排序规则

  • 能够复现问题,我们这边先排查下原因。可以先通过指定 database 的 default collation 来暂时绕过这个问题,下面是例子:
MySQL [(none)]> create database t2 default collate utf8mb4_general_ci;
Query OK, 0 rows affected (0.01 sec)

MySQL [(none)]> show create database t2;
+----------+-------------------------------------------------------------------------------------------+
| Database | Create Database                                                                           |
+----------+-------------------------------------------------------------------------------------------+
| t2       | CREATE DATABASE `t2` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ |
+----------+-------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MySQL [(none)]> use t2;
Database changed
MySQL [t2]> create table tt (t1 bigint,c1 varchar(10));
Query OK, 0 rows affected (0.01 sec)

MySQL [t2]> show create table tt;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                      |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tt    | CREATE TABLE `tt` (
  `t1` bigint(20) DEFAULT NULL,
  `c1` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

好的,非常感谢~ 那我们要在 tidb-lightning 恢复之前,就要创建好 database 指定 collation .

:+1:



请问,为什么我这个版本测试好像不支持,是还有什么特殊设置吗?