MySQL 转换表,排序规则未更改。

3

我正在使用utf8mb4的mariadb (" 10.1.20-MariaDB-1~trusty")。现在,我正在将所有表转换为"row_format = dynamic"和表排序规则"utf8mb4_unicode_ci"。我注意到我的数据库中有一些顽固的表仍然具有"utf8mb4_general_ci"作为排序规则,例如下面这个:

use database;

SHOW TABLE STATUS WHERE COLLATION != "utf8mb4_unicode_ci";

    | Name                       | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation          | Checksum | Create_options     | Comment |
+----------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+--------------------+----------+--------------------+---------+
| table                    | InnoDB |      10 | Dynamic    |    5 |           3276 |       16384 |               0 |        32768 |         0 |           NULL | 2016-12-21 21:12:18 | NULL        | NULL       | utf8mb4_general_ci |     NULL | row_format=DYNAMIC |  

然后当然我会运行类似这样的命令:
ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这个命令将不会出现错误。再次检查表格状态,它仍然显示为:
Collation = utf8mb4_general_ci
对于那个表格。
将相同的数据库转储并导入到我的本地5.6.32-78.0 Percona服务器中,并在那里执行相同的操作,结果表格排序规则将被转换为所需的utf8mb4_unicode_ci。
有人有想法可能是什么原因吗?
1个回答

2

很可能表中没有需要转换的列,因此该操作被跳过。请尝试运行

ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, FORCE;

或者

ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, ALGORITHM=COPY;

基于这个问题,已创建了一个错误报告: https://jira.mariadb.org/browse/MDEV-11637


/* SQL错误(1071):指定的键太长;最大键长度为767字节 */ - buycanna.io
@user345426,请粘贴SHOW CREATE TABLE的输出结果。 - elenst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接