某些情况下我们会遇到数据库 不同表甚至相同表的各个字段的字符集或排序规则 不同
以前是一个个字段修改 后来一个个表修改 现在 可以直接修改一个数据库中的了
1单表修改
ALTER table `jzb_asset` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2
自动批量循环修改 仅需要修改数据库名
需要注意 如果某个表添加了外键就无法修改
DROP PROCEDURE
IF
EXISTS hello_sql;-- 检查程序
-- DELIMITER;; 定义结束符号为;;
CREATE PROCEDURE hello_sql ( ) BEGIN-- 创建程序
DECLARE
i INT DEFAULT 0;-- 创建字段
DECLARE
s VARCHAR ( 255 ) DEFAULT 'tablename';
DECLARE
leng INT DEFAULT 0;
SET leng = ( SELECT COUNT(*) FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'ry-cloud' AND `TABLE_TYPE` = 'BASE TABLE' );
WHILE-- 创建循环
s < leng DO
SET s = ( SELECT TABLE_NAME FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'ry-cloud' AND `TABLE_TYPE` = 'BASE TABLE' LIMIT i, 1 );
SET @InsertData = CONCAT( 'ALTER TABLE ', s, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' );
PREPARE stmt
FROM
@InsertData;
EXECUTE stmt;
SELECT
@InsertData;
SET i = i + 1;
END WHILE;
END;
CALL hello_sql ( );-- 执行程序