mysql批量修改数据表字段编码

获取数据库databasename的所有表名

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'databasename' AND table_type = 'BASE TABLE';

获取数据库databasename的所有表的编码修改sql(推荐,修改后字段编码会被一并修改)

SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') as upsql
FROM information_schema.tables
WHERE table_schema = 'databasename' AND table_type = 'BASE TABLE';

获取数据库databasename的每个表中的所有字段的编码修改sql(使用上面第二个后不需要执行这个,不建议使用此项)

不建议的独立字段修改(仅供参考)
注意:目前发现使用上面的语句修改表编码后字段会自行修改

SELECT
CASE
WHEN data_type IN ('text', 'tinytext', 'mediumtext', 'longtext') THEN
CONCAT('ALTER TABLE ', table_name, ' MODIFY COLUMN ', column_name, ' ', data_type, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
WHEN data_type = 'varchar' THEN
CONCAT('ALTER TABLE ', table_name, ' MODIFY COLUMN ', column_name, ' VARCHAR(', character_maximum_length, ') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
WHEN data_type = 'char' THEN
CONCAT('ALTER TABLE ', table_name, ' MODIFY COLUMN ', column_name, ' CHAR(', character_maximum_length, ') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
ELSE
END as upsql
FROM information_schema.columns
WHERE table_schema = 'databasename';
冀ICP备2021025979号-1