转换字符集失败

【 TiDB 使用环境】生产
【 TiDB 版本】v6.1.0
【遇到的问题】

【复现路径】做过哪些操作出现的问题
【问题现象及影响】

问题如下,默认的TIDB字符集规则为utf8mb4_bin,现需要修改utf8mb4_general_ci,报错如下

mysql> show index from xxxxx
+----------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+-----------+
| Table          | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression | Clustered |
+----------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+-----------+
| xxx |          0 | PRIMARY    |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               | YES     | NULL       | YES       |
| xxx |          0 | unq_e_code |            1 | e_code      | A         |           0 |     NULL | NULL   |      | BTREE      |         |               | YES     | NULL       | NO        |
+----------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+-----------+
2 rows in set (0.01 sec)

mysql>
mysql> alter table xxxx convert to character set utf8mb4 collate utf8mb4_general_ci;
ERROR 8200 (HY000): Unsupported converting collation of column 'e_code' from 'utf8mb4_bin' to 'utf8mb4_general_ci' when index is defined on it.

删除索引改呢

删除索引改可以,但是代价太大,主键索引/二级索引都要删除的

https://docs.pingcap.com/zh/tidb/stable/character-set-and-collation

参考下~

看了下,还是没能解决我的问题

我在6.1.1 版本上测试只要删掉e_code列上的索引就可以了,测试时id列设置的数据类型是int。

你 可以找个有多个唯一索引键的表试试

字符集只有varchar等字符类型才有字符集和排序字符集的说法,如果是int、date类型是没有字符集这个属性的

我也遇到这个问题了,有解决方案吗?

这种情况下,感觉你只能新建一个表,这个表设置为你需要的字符集编码,然后重新导入数据还快些