技术饭

MySQL 批量修改数据表编码及字符集

copylian    0 评论    190 浏览    2020.11.10

经常使用SQLyog导出导入数据库时,不懂为什么经常性出现编码错误字符集被设置成了默认,奇怪的很,可能是软件版本问题,当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改。以下备注批量修改方案( 以修改为 utf8mb4_general_ci为例,注意将 db_name 换为真实的数据库名 )。

1. 修改数据库编码及字符集

这一步比较简单,直接执行即可:

ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

2. 修改数据表与表中字段的编码及字符集

这里需要两步。

首先,需要利用语句,生成所有实际执行的语句:

SELECT 

     CONCAT(

          "ALTER TABLE `",

          TABLE_NAME,

          "` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

     ) AS target_tables 

FROM

     INFORMATION_SCHEMA.TABLES 

WHERE TABLE_SCHEMA = "pddadmin" 

     AND TABLE_TYPE = "BASE TABLE";

此语句会基于 MySQL 的元数据表,得到一组可直接执行的 SQL 列表,如下:

ALTER TABLE `aikehou_activity` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

ALTER TABLE `aikehou_activity_address_group` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

ALTER TABLE `aikehou_activity_address_user` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

ALTER TABLE `aikehou_activity_browse_log` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

ALTER TABLE `aikehou_activity_discount` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

ALTER TABLE `aikehou_activity_form` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

ALTER TABLE `aikehou_activity_form_field` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

然后,直接将语句粘贴并执行即可。

注意,这里使用 CONVERT TO 而非 DEFAULT,是因为后者不会修改表中字段的编码和字符集。

此外,对于数据表比较多的数据库,可以先将第一步的执行结果导出到 .sql 文件,再通过该 SQL 文件执行即可。

飓风呀
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!

  • 还没有评论,沙发等你来抢