修复 MySQL 编码问题
有个疑似 OCD 患者最近抽风升级了一下 MySQL 数据库,然后发现 blog 里面全都变成了乱码。
那乱码的模式一看就是把 utf8
直接扔进了 latin1
的数据库,一看 SHOW CREATE TABLE mt_entry
发现果然如此。
略有些慌神,看了 MySQL 文档发现用 ALTER TABLE
的 CONVERT TO
硬来有点不太行好,遂想到可以试试看 mysqldump
,于是做了:
当作 latin1
(不然会再按 utf8
编码一次):
mysqldump mt_delphij --default-character-set=latin1 -r utf8.dump
把里面的 CHARSET=latin1 替换为 CHARSET=utf8:
sed -e s,CHARSET=latin1,CHARSET=utf8,g < utf8.dump > utf8.dump.edited
删掉其中的 SET NAMES latin1
。
然后重新导入:
$ mysql -uroot -p --default-character-set=utf8 mt_delphij
mysql> SET names utf8;
mysql> SOURCE utf8.dump.edited;
还好没用到 zfs rollback
。