首页/数据/数据库速查/表与列字符集转换(ALTER 转换)
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

表与列字符集转换(ALTER 转换)

把 latin1 老表迁到 utf8mb4:ALTER TABLE … CONVERT TO CHARACTER SET utf8mb4 会重建并转换全部文本列,大表要评估时间与空间。

数据库速查数据更新于 2026-10-12
用途字符集迁移
语法ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 [COLLATE …]
配套库默认 / 连接字符集 / 应用配置

查看与转换

查看与转换
SELECT table_name, table_collation FROM information_schema.tables WHERE table_schema='appdb';
ALTER TABLE orders CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
ALTER DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
转换会锁表重建(在线 DDL 支持有限);latin1 里存的是「已被转成 utf8 的字节」这类历史脏数据要先甄别,否则转换后乱码依旧。

易错点

  • 只改表默认字符集(DEFAULT CHARSET)不会转换已有列,必须用 CONVERT TO
  • 转换前后都要备份,且应用连接的字符集要同步修改,否则写入又乱了

数据来源与参考

  • MySQL 8.0 Reference Manual: ALTER TABLE - Converting Character Sets

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌