在备份、迁移、恢复数据库的时候,要从mysql8.0版本迁移到5.7版本库中,在迁移的过程中有些表字段设置了字符类型为 utf8mb4_0900_ai_ci ,但这个字符类型在5.7中是没有的,因此如果一个一个去改怕是改一个月去了。有些同学使用代码编程,在项目中连接数据库去修改,也是可以的,但是我不想这么麻烦,就用了存储过程。下面介绍怎么用存储过程批量修改表字段字符类型。
1.首先写一个sql查看哪些表和字段需要修改:
SELECT TABLE_NAME, COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_TYPE,COLUMN_COMMENT COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'test' and collation_name = 'utf8mb4_0900_ai_ci';
2.然后编写一个存储过程脚本,去批量修改:
drop procedure if exists modify_collation;
DELIMITER //
create PROCEDURE modify_collation(out origin_num int(10),out count_num int(10))
COMMENT 'modify_collation'
SQL SECURITY DEFINER
BEGIN
DECLARE t_name VARCHAR(100);
declare c_name VARCHAR(100);
declare c_type VARCHAR(20);
declare c_comment VARCHAR(