修复 MySQL 编码问题

• 本文约 265 字,阅读大致需要 1 分钟 | Development | #MySQL | #Database | #encoding | #UTF-8

有个疑似OCD患者最近抽风升级了一下MySQL数据库,然后发现blog里面全都变成了乱码。

那乱码的模式一看就是把 utf8 直接扔进了 latin1 的数据库,一看 SHOW CREATE TABLE mt_entry 发现果然如此。

略有些慌神,看了MySQL文档发现用 ALTER TABLECONVERT 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