MYSQL通过SQL语句批量更改数据库、表、表字段的默认字符集及排序方式
MYSQL通过SQL语句批量修改数据库表的默认字符集及排序方式修改数据库修改表修改表字段修改数据库ALTER DATABASE 数据库名 CHARACTER SET字符集COLLATE 字符集排序 ;//例子ALTER DATABASE `databasename` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;修改表ALTER TABLE 数据
·
修改数据库
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语句~
更多推荐
已为社区贡献1条内容
所有评论(0)