TiDB升级之后不支持修改具有索引的字段的排序规则

【 TiDB 使用环境】测试
【 TiDB 版本】7.5.3
【复现路径】做过哪些操作出现的问题 4.0.12 升级到 7.5.3
【遇到的问题:问题现象及影响】
原4.0.12版本可以正常修改索引字段的排序规则

mysql> select version();
+---------------------+
| version()           |
+---------------------+
| 5.7.25-TiDB-v4.0.12 |
+---------------------+
1 row in set (0.01 sec)

mysql> show create table nds_file_info_test\G
*************************** 1. row ***************************
       Table: nds_file_info_test
Create Table: CREATE TABLE `nds_file_info_test` (
  `id` varchar(40) NOT NULL COMMENT '主键',
  ...
  `file_name` varchar(512) NOT NULL COMMENT 'file_name',
  ...
  PRIMARY KEY (`id`),
  ...
  KEY `idx_nds_file_info_parent_folder_id_file_name` (`parent_folder_id`,`file_name`),
  ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='xxx'
1 row in set (0.00 sec)

mysql> ALTER TABLE nds_file_info_test MODIFY COLUMN file_name varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NOT NULL COMMENT 'file_name';
Query OK, 0 rows affected (2.05 sec)

mysql> show create table nds_file_info_test\G
*************************** 1. row ***************************
       Table: nds_file_info_test
Create Table: CREATE TABLE `nds_file_info_test` (
  `id` varchar(40) NOT NULL COMMENT '主键',
  ...
  `file_name` varchar(512) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'file_name',
  ... 
  PRIMARY KEY (`id`),
  ...
  KEY `idx_nds_file_info_parent_folder_id_file_name` (`parent_folder_id`,`file_name`),
  ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='租户文件信息表'
1 row in set (0.00 sec)

但是升级到 7.5.3 版本后 执行同样的操作会报错 :
ERROR 8200 (HY000): Unsupported modifying collation of column ‘file_name’ from ‘utf8mb4_general_ci’ to ‘utf8mb4_bin’ when index is defined on it.

mysql> select version();
+--------------------+
| version()          |
+--------------------+
| 8.0.11-TiDB-v7.5.3 |
+--------------------+
1 row in set (0.00 sec)

mysql> show create table nds_file_info_test\G
*************************** 1. row ***************************
       Table: nds_file_info_test
Create Table: CREATE TABLE `nds_file_info_test` (
  `id` varchar(40) NOT NULL COMMENT '主键',
   ...
  `file_name` varchar(512) COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名',
  ...
  PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */,
  ...
  KEY `idx_nds_file_info_parent_folder_id_file_name` (`parent_folder_id`,`file_name`),
 ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='租户文件信息表'
1 row in set (0.00 sec)

mysql> ALTER TABLE nds_file_info_test MODIFY COLUMN file_name varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin  NOT NULL COMMENT 'file_name';
ERROR 8200 (HY000): Unsupported modifying collation of column 'file_name' from 'utf8mb4_general_ci' to 'utf8mb4_bin' when index is defined on it.

4.0.12 后面的版本是有做了什么修改吗? 针对这个问题除了 删除索引后修改排序规则外还有没有更好的解决方法?

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

排序规则(collation)影响字符串的比较方式。如果一个列已经用于索引,并且该索引被用于查询优化,改变这个列的排序规则可能会导致索引的行为发生变化,从而影响查询结果的正确性。因此,TiDB 出于数据一致性和查询准确性的考虑,不允许在列上有索引定义的情况下修改其排序规则:删除并重建索引

在早期版本中,TiDB 允许对已定义索引的列进行排序规则的修改,但在后续版本中,为了保持索引的一致性和避免潜在的数据问题,TiDB 引入了这个限制。

好的,感谢大佬

这种情况确实不支持,有同学还专门做了验证

删了那个索引,再改,然后再建索引吧,我也是刚升级,753,好多这个问题

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。