mysql批量修改表字符集的操作流程_Charset与Collate转换

张开发
2026/5/5 2:50:53 15 分钟阅读
mysql批量修改表字符集的操作流程_Charset与Collate转换
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 会重写所有字段而 ALTER TABLE t CHARACTER SET utf8mb4 仅修改表默认字符集、不影响现有列后者常被误用导致字段仍为 latin1。ALTER TABLE 修改字符集时CONVERT TO 和 CHARACTER SET 的区别必须分清直接改表字符集不是所有写法效果都一样。ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 会重写所有字段含列定义、索引、注释而 ALTER TABLE t CHARACTER SET utf8mb4 只改表默认字符集已有列完全不动——后者常被误用改完发现字段还是 latin1。CONVERT TO 是真正批量“转换内容”适合从旧编码迁移到新编码如 utf8 → utf8mb4CHARACTER SET 只影响后续新增列的默认值对存量字段无任何作用如果表里有 ENUM 或 SET 字段CONVERT TO 会尝试按新字符集重新解析枚举值可能报错Incorrect string value得先手动清理非法值批量修改多张表别手写 N 条 ALTER TABLE用 SQL 拼接生成语句最稳避免漏表或拼错名。核心是查 information_schema.tables 过滤目标库当前字符集再拼出 CONVERT TO 语句。先确认要改哪些表SELECT CONCAT(ALTER TABLE , table_name, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;) FROM information_schema.tables WHERE table_schema your_db AND table_collation NOT LIKE utf8mb4%;执行前务必加 SELECT 预览别直接 INSERT INTO ... SELECT 批量执行——万一条件写错全库乱码就回不去了大表慎用单次 CONVERT TO 会锁表MySQL 5.6 支持 ALGORITHMINPLACE 的场景有限TEXT/BLOB 列存在时基本都会降级为 COPYCOLLATE 不只是排序规则它影响索引行为和 WHERE 查询结果改 COLLATE 不等于只改“看起来怎么排”它直接决定字符串比较是否大小写敏感、是否忽略重音符号。比如把 utf8mb4_general_ci 换成 utf8mb4_0900_as_csWHERE name ABC 就不再匹配 abc。 Zeemo AI 一款专业的视频字幕制作和视频处理工具

更多文章