Mysql转换表,整理不变

时间:2016-12-22 09:56:50

标签: mysql mariadb type-conversion collation utf8mb4

我正在使用带有utf8mb4的mariadb(“10.1.20-MariaDB-1~trusty”)。现在我正在将所有表转换为“row_format = dynamic”和表格排序“utf8mb4_unicode_ci”。我注意到我的数据库中有一些流氓表仍然有“utf8mb4_general_ci”作为整理,就像这样:

  

使用数据库;

     

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表CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

哪个会没有错误地完成。之后再次检查表状态,仍然显示

  

Collat​​ion = utf8mb4_general_ci

表。

将同一个数据库转储并导入我的本地5.6.32-78.0 Percona Server并执行相同的操作会导致表格排序根据需要转换为utf8mb4_unicode_ci。

有没有人知道可能是什么原因?

1 个答案:

答案 0 :(得分: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