今天项目部署遇到个坑,之前建数据库的时候,把所有的 collation 都写成了 utf8,在测试服务器上也没怎么注意,部署正式服务器果断用 mb4,故需要修改上百个字段的 collation。

根据一次可以,两次能忍,三次绝对不行的懒人原则 orz,决定写个脚本实现一键修改,废话不多说先去网上找了个轮子。

referer: https://my.oschina.net/xuqiang/blog/507629

经过一番修改和摸索,总结出如下存储过程:

begin
    declare f_name varchar(100); 
    declare b int default 0;    /*是否达到记录的末尾控制变量*/
-- 注意修改下面的数据库名称 wsm_aliyun
    declare table_name cursor for SELECT TABLE_NAME FROM information_schema.TABLES where TABLE_SCHEMA = 'construction_online';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;

    OPEN table_name;
    REPEAT
    FETCH table_name INTO f_name; /*获取第一条记录*/
SET @STMT :=CONCAT("ALTER TABLE ",f_name," CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;");   
PREPARE STMT FROM @STMT;   
    EXECUTE STMT;  
-- INSERT into TestTable(name) VALUES (f_name);
       -- ALTER TABLE f_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 
    UNTIL b = 1
END REPEAT;
    close table_name;
end

其中,construction_online 是数据库名,utf8mb4 和 utf8mb4_unicode_ci 修改成你想替换的 charset 和 collation 即可。

最后:call ……();

完事。