修改数据库
ALTER DATABASE 数据库名
CHARACTER SET 字符集
COLLATE 字符集排序
;
//例子
ALTER DATABASE `databasename` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改表
ALTER TABLE 数据库名
.表名
CHARSET= 字符集
COLLATE=字符集排序
;
原理通过查询数据库中所有表 并判断表中的 字符集 或 排序 ,查询封装出对应可修改的表SQL,复制查询结果 —> 执行即可
//例子:查询数据库 databasename中,字符集为 utf8 或者 字符集排序方式为utf8mb4_general_ci的表,并构建更新语句
SELECT DISTINCT CONCAT('ALTER TABLE `',TABLE_SCHEMA,'`.`',TABLE_NAME,'` CHARSET=utf8mb4, COLLATE=utf8mb4_unicode_ci;') AS sqltext
FROM `information_schema`.`COLUMNS` WHERE table_schema = 'databasename' AND (CHARACTER_SET_NAME = 'utf8' OR COLLATION_NAME = 'utf8mb4_general_ci')
输出结果:
复制输出结果执行器执行即可批量替换;
修改表字段
ALTER TABLE 数据库名
.表名
CHANGE 字段名
字段名
varchar(64) CHARSET 字符集
COLLATE 字符集排序
NOT NULL ;
与修改表同理,获得数据表后判断表中的字段 ,满足条件构建出更新sql,复制到执行器执行即可;
//例子
SELECT CONCAT('ALTER TABLE `',TABLE_SCHEMA,'`.`',TABLE_NAME,'` CHANGE `',column_name,'` `',
column_name,'` ',
COLUMN_TYPE,
' CHARSET utf8mb4 COLLATE utf8mb4_0900_ai_ci ',IF(IS_NULLABLE = 'NO', 'NOT NULL', 'NULL'),
' ',
IF(ISNULL(COLUMN_DEFAULT), '', CONCAT('default \'', COLUMN_DEFAULT, "'")),
';') AS sqltext
FROM `information_schema`.`COLUMNS` WHERE table_schema = 'manghe' AND (CHARACTER_SET_NAME = 'utf8' OR COLLATION_NAME = 'utf8mb4_0900_ai_ci' or COLLATION_NAME = 'utf8mb4_unicode_ci');
输出效果:
复制输出结果执行器执行即可批量替换;
通过上述例子,大家可以按需修改sql 增加自己的判断从而实现想要的更新SQL语句~