庫一級的更改:
-- 單個庫字符集更改 ALTER DATABASE `ymcd_aisw` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; ALTER DATABASE `ymcd_aisw` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'; -- 批量修改庫的字符集 SELECT CONCAT('ALTER DATABASE `', `SCHEMA_NAME`, '` CHARACTER SET \'utf8\' COLLATE \'utf8_general_ci\'; ') AS `批量改庫字符集SQL` FROM information_schema.`SCHEMATA` WHERE `SCHEMA_NAME` NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys') -- 排除系統庫,可以再添加自己需要排除的庫 -- `SCHEMA_NAME` IN('SASAD', 'ASDASD', ...) -- 或者指定哪些庫要改
表一級的更改:
-- 批量改表的字符集 SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CHARACTER SET = utf8, COLLATE = utf8_general_ci;') FROM information_schema.`TABLES` WHERE `TABLE_SCHEMA` = 'ymcd_aisw' -- 指定單庫 -- `TABLE_SCHEMA` IN ('x111', 'xaaaq') -- 指定多庫
字段一級的更改:
-- 批量改字段 -- 主鍵字符字段不涉及索引問題,聯合主鍵也是一樣 SELECT CONCAT( -- 指定的庫和表名 'ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` ', -- 指定的字段和數據類型 'MODIFY COLUMN `', COLUMN_NAME, '` ', COLUMN_TYPE, -- 指定的字符集和對應的排序規則 ' CHARACTER SET utf8 COLLATE utf8_general_ci ', -- 是否非空和默認值的組合 (CASE WHEN IS_NULLABLE = 'NO' AND COLUMN_DEFAULT IS NULL THEN 'NOT NULL ' WHEN IS_NULLABLE = 'NO' AND COLUMN_DEFAULT IS NOT NULL THEN CONCAT('NOT NULL DEFAULT "', COLUMN_DEFAULT, '" ') WHEN IS_NULLABLE = 'YES' AND COLUMN_DEFAULT IS NULL THEN 'NULL DEFAULT NULL ' WHEN IS_NULLABLE = 'YES' AND COLUMN_DEFAULT IS NOT NULL THEN CONCAT('NULL DEFAULT "', COLUMN_DEFAULT, '" ') END), -- 保留原始注釋信息 'COMMENT "', COLUMN_COMMENT, '";' ) FROM information_schema.`COLUMNS` WHERE CHARACTER_SET_NAME = 'utf8mb4' -- 根據原字符集來篩選 AND `TABLE_SCHEMA` = 'ymcd_aisw' -- 指定單庫 -- `TABLE_SCHEMA` IN('') -- 指定多庫