执行以下脚本,执行脚本查询出的内容。注意:表太大比较耗时。
-- 替换为你的数据库名
SET @db_name = 'tableName';
SET @charset = 'utf8mb4';
SET @collation = 'utf8mb4_general_ci';
-- 生成修改表默认字符集的语句
SELECT CONCAT(
'ALTER TABLE `', table_name, '` DEFAULT CHARACTER SET ', @charset, ' COLLATE ', @collation, ';'
) AS alter_table_sql
FROM information_schema.tables
WHERE table_schema = @db_name
AND table_type = 'BASE TABLE'; -- 只处理用户表,排除视图等
-- 生成修改所有字符串字段的语句
SELECT CONCAT(
'ALTER TABLE `', c.table_name, '` MODIFY COLUMN `', c.column_name, '` ',
c.data_type,
IF(c.character_maximum_length IS NOT NULL, CONCAT('(', c.character_maximum_length, ')'), ''),
' CHARACTER SET ', @charset, ' COLLATE ', @collation,
IF(c.is_nullable = 'NO', ' NOT NULL', ' NULL'),
IF(c.column_default IS NOT NULL, CONCAT(' DEFAULT ', QUOTE(c.column_default)), ''),
' COMMENT ', QUOTE(c.column_comment), ';'
) AS alter_column_sql
FROM information_schema.columns c
JOIN information_schema.tables t ON c.table_name = t.table_name AND c.table_schema = t.table_schema
WHERE c.table_schema = @db_name
AND t.table_type = 'BASE TABLE'
AND c.data_type IN ('varchar', 'char', 'text', 'tinytext', 'mediumtext', 'longtext') -- 所有字符串类型
AND (c.character_set_name IS NULL OR c.character_set_name != @charset OR c.collation_name != @collation);