Skeyevss FAQ:MySQL 字符集与排序规则
1. 推荐配置
新项目建议:
- 字符集
utf8mb4:完整 Unicode,含 emoji 与部分生僻字; - 排序规则:常用
utf8mb4_unicode_ci或utf8mb4_0900_ai_ci(MySQL 8),按版本与语言需求选择; - 连接层:应用 DSN 指定
charset=utf8mb4,避免 连接 latin1 导致乱码。
2. 历史包袱 utf8
MySQL 的 utf8 实为 阉割 UTF-8(最多三字节),无法存部分字符。若库表仍是 utf8,可能出现 写入截断或报错。
3. 典型故障
- 中文设备名乱码:表/列 charset 与连接不一致;
- 大小写敏感查询异常:
civscsvs_bin; - 索引过长:
utf8mb4下 varchar 索引字节数更易触 767/3072 限制,需控制长度或使用前缀索引。
4. 迁移注意
ALTER TABLE CONVERT TO 大表会 锁表 或长时间 Online DDL;需 备份、灰度、观察复制延迟。
5. 与 SQLite 切换
若项目在 MySQL 与 SQLite 间切换(参见对应 FAQ),注意 类型与文本编码 差异;迁移脚本应 显式指定编码。
字符集问题 连接、库、表、列四层对齐;排查时一条 SHOW CREATE TABLE 加应用 DSN 即可定位大半。