MySql 批量修改所有表的字符编码

  1. 修改一张表的所有的字符编码

     alter table 表名 convert to character set utf8mb4;
    
  2. 查找出所有的表的表名

     select table_name from information_schema.`TABLES` where TABLE_SCHEMA = '数据库名';
    

使用存储过程批量修改所有的表

CREATE DEFINER=`root`@`%` PROCEDURE `存储过程名字`() -- 定义储存过程,并给存储过程定义命名
begin
 
DECLARE cnt VARCHAR(100); -- 声明变量用来记录查询出的表名
DECLARE i int;  -- 循环条件,同时可以用来标记表第几张表
set i = 0;

-- 循环开始
	while i < 158  do -- 这里是158是因为我的数据库中表的数量是158,想不写死可以通过再定义一个变量,动态赋值
		IF i < 56 THEN		-- 这里我的前56张表并不需要修改字符集编码
		set i = i + 1;
ELSE
	select table_name into @cnt from information_schema.`TABLES` where TABLE_SCHEMA = 'dftc_dev' limit i,1;
	-- select @cnt; -- mysql的打印语句
	-- alter table @cnt convert to character set utf8; -- 这一句报错,必须动态拼接才行
	
	set @sql = concat("alter table ", @cnt, " convert to character set utf8mb4");  -- 拼接,注意语句中的空格
	prepare stmt from @sql;  -- 预处理
		execute stmt;  -- 执行
	deallocate prepare stmt;  -- 释放
	set i = i + 1;
END IF;					
	
	end while;  
-- 循环结束,注意分号
 
end

转载自:https://blog.csdn.net/LUNG108/article/details/78285054

你可能感兴趣的:(MySql 批量修改所有表的字符编码)