还原后文章标题里的中文全变成问号,英文和数字正常,数据库里看是 ??????,改表字符集也救不回来。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

mysqldump --default-character-set=utf8mb4 --single-transaction blog > db.sql
mysql --default-character-set=utf8mb4 blog < db.sql

导出时连接字符集用的是 latin1,中文在导出阶段就已经被替换成问号,这个转换不可逆。导入端字符集再对也没用。这一点先确认清楚,后面就不用反复试。

「mysqldump 字符集」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

具体做法是,导出时显式指定 --default-character-set=utf8mb4;导入前确认目标库的字符集也是 utf8mb4;还原后抽查中文内容 确认没有问号。

改完照着核一遍,文章标题和正文的中文完整显示,数据库里查不到连续的问号。

作者 9823189