Posts Tagged ‘bbs’

Mysql编码从latin1到utf8的转换

星期二, 十月 16th, 2007

前一段时间有人要xctc旧bbs的数据库,我都不好意思给,原因是数据库编码问题我一直没有解决,给了别人打开肯定是一堆垃圾乱码。今天无论如何我是要解决这个问题,搞不定这个数据库誓不为人。

xctc这个数据库不像一般的数据库,编码中途经过很多次转换,采用的转换方法不全相通,而且mysql版本也不同,所以有一些表正常有一些表不正常,转来转去,总会出现一些乱码错误。当n年后的今天我重新打开这个数据库时,已经忘记了它的字符集,忘了它存在的版本,甚至忘了其中各表的含义。我的环境是mysql5.0.45,xctc数据库创建的时候应该是在 2001年,那时候的mysql最多算3.x,经过了4.x后的mysql5,不知道还有什么兼容性问题没(其实毫无疑问,大大的有)。首先把数据库加入到mysql5中,已经忘了当时的vbb的版本是多少,只好找个最新版本升级之,中间出错。分析表、修复表、优化表,再升级,升级成功,只是内容全是乱码。网上找很多资料,转换数据库字符集了很多次,都没有解决办法。最后根据对vbb的理解加上n多资料,终于解决这个问题。

字符集问题,导入数据库后phpmyadmin直接显示了数据库字符集为:latin1。这就好办了,把latin1转换为utf8就可以了。转的时候由于mysql版本的差异,所以导出时候需要加入 “–compatible=mysql40″参数。

D:\mysql5\bin>mysqldump -uroot -p --quick --compatible=mysql40 --default-character-set=latin1 --extended-insert=FALSE xctc > d:/xctc.sql

导出后,在phpmyadmin中新建一个数据库xctc2,字符编码设为utf8-general-ci。然后执行下列语句:

mysql -uroot -p --default-character-set=utf8 xctc2 < d:/xctc.sql

一般数据库导入不会有问题,但是xctc这个数据库中间转换太多,会有错误。错在word表,里面所有字段都是乱码,导入时会认为乱码部分为空,即所有字段内容都是空,这样就会出现记录重复。好在vbb对word表要求不高,只是一个关键词的表。解决办法是清空之,回头升级好了重建关键词即可。这样,数据库xctc2就是一个完整的utf8字符集的数据了。上传,修复,升级,重建,恢复模板。一切搞定。

新的数据已经在xctcbbs.cn上了(注:空间已挂,数据丢失) 。