最近要给discuz论坛升级, 数据库是mysql4.0,mysql4.0以前的低版本不支持编码,数据都是Latin1编码的。新版论坛计划采用mysql5.1,gbk编码。
因为mysql版本相差太大,直接复制数据库文件的方法肯定不行,只能采用mysqldump。
步骤:
1. 将mysql4.0中数据导出成sql文件
mysqldump –skip-extended-insert –default-character-set=latin1 dbname -q -uroot -ppassword > dbname.sql
加 –skip-extended-insert参数是为了将每条记录写成独立的insert into,以降低可能存在的导入时sql出错造成的损失
2. 在 dbname.sql 最前面加一句 set names gbk
如果文件较小,直接vi dbname.sql后加;如果文件太大,可以 先建一个文件names.txt,里面写set names gbk; 然后用
cat names.txt dbname.sql > dbname_gbk.sql
3. 将sql文件导入到mysql5中:
mysql -uroot -ppassword -f dbname < dbname.sql
低版本中个别乱码造成可能造成sql报错而中断,加 -f 参数意思是如果出错,继续。 因为前面已经采用一条记录一个独立sql的方式,就算出错偶尔也就丢几条记录。
测试成功,一百万记录,中间就丢了2条。能接受。