MySQL字符集统一修改批量操作数据库中的表及字段
-- 假设我们需要将数据库mydb中所有表的字符集修改为utf8mb4,并且校对规则为utf8mb4_general_ci
USE mydb;
-- 获取所有表名
SELECT table_name INTO @tables FROM information_schema.tables WHERE table_schema = 'mydb';
-- 初始化表名变量
SET @table = NULL;
-- 定义存储过程用于修改表的字符集和校对规则
CREATE PROCEDURE ChangeCharsetOfTables()
BEGIN
-- 循环遍历所有表
REPEAT
-- 更新下一个表的字符集和校对规则
SET @stmt = CONCAT('ALTER TABLE `', @tables, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 获取下一个表名
SELECT table_name INTO @table FROM information_schema.tables WHERE table_schema = 'mydb' AND table_name > @table ORDER BY table_name LIMIT 1;
UNTIL @table IS NULL END REPEAT;
END;
-- 调用存储过程
CALL ChangeCharsetOfTables();
-- 删除存储过程
DROP PROCEDURE IF EXISTS ChangeCharsetOfTables;
这段代码首先选择了数据库mydb
,然后获取了所有表的名字,并通过一个存储过程和循环语句,将每一个表的字符集和校对规则修改为utf8mb4
和utf8mb4_general_ci
。最后,删除了创建的存储过程。这个过程可以用于批量修改数据库中表的字符集,特别适用于需要进行数据库迁移或字符集统一的场景。
评论已关闭