最近由于论坛帐号整合需要,不得不把原蓝卡论坛的gbk编码转换为utf-8,由于Discuz官方并没有提供转换工具,网上也没有什么靠谱的教程,而且论坛中数据较多,可闪失不得,这不禁让我十分为难。。
我先尝试了网上比较流行的一种利用Discuz数据库功能进行数据库备份、恢复达到转换目的的方法,可是在我按照教程进行操作后,发现虽然前台的帖子、用户等数据全部恢复,但是后台的数据全部丢失!且还有部分乱码的情况出现,要重新设置那么多后台选项,我才不干呢!于是,我便开始琢磨另一种转换方法,当我看到另一篇教程,让我们用文本编辑工具将DZ程序文件手动转换编码然后再转换数据库编码达到转换目的的方法后(几乎不能成功),我突然灵机一动,想到了!这种方法成功率非常高!下面便是详细教程:
备份
不管怎么说,备份都是必须的!
全新安装Discuz!
首先,我们要去Discuz官网下载UTF-8版本的Discuz(必须要与GBK论坛同版本),并全新安装它到服务器上,最好使用一个单独的子域名,和一个单独的数据库,方便后面操作,注意:数据库前缀最好与GBK论坛一样,当然,如果你无法使用更多的数据库,只能将GBK与UTF安装到同一数据库中,那又另当别论!(后面的操作都是在两个论坛安装在不同数据库的基础上进行的,若两论坛安装在同一数据库内,某些操作可能会出现问题,请务必备份!)
转换数据库编码
转换数据库编码的最好方法便是导入导出,首先在phpmyadmin内将GBK论坛的数据库导出为sql文件,编码选择utf-8,下载到本地后,用记事本打开它,查找CHARSET=gbk替换为CHARSET=UTF8即可
导入数据库
替换完毕后,删除UTF8论坛的所有数据表,然后用phpmyadmin导入刚才修改好的sql文件,编码选择utf-8,导入完成后,数据库的转换便完成了!注意:若GBK论坛和UTF论坛的数据表前缀不同,导入数据库后还需要到UTF论坛的config目录里的con里修改数据表前缀,否则无法正常运行!
转换模版与插件
转换好数据库后,论坛并不能直接开始使用,因为GBK论坛使用的插件和模版都不能适用于UTF-8论坛,首先我们需要将GBK论坛的source/plugin目录覆盖到新论坛,再进入新论坛后台“插件”选项,对插件尝试卸载,若能正常弹出卸载提示的插件则不用管,若卸载时提示“插件文件缺失”,则需要重新进入数据库,找到数据表pre_common_plugin(pre是你的表前缀),删除提示“插件文件缺失”的插件,然后再进入后台重新安装(注意:若提示无法安装,请参考此教程修改DZ文件后再尝试安装:)用这种方法进行处理,直至所有的插件都能正常卸载,插件的处理便完成了!注意:若发现有插件在数据表中删除后在后台无法安装,则是该插件不支持UTF-8编码,需要给该插件手动转换编码并增加UTF-8编码的XML,参见:,注意,使用这种方法进行处理后,插件的设置会丢失,大家可以从GBK论坛手动复制插件的设置参数
接下来转换模版,将GBK论坛的template目录下的你使用的模版复制到UTF-8论坛,并将模版下载到本地,将含有中文字符的文件用记事本进行另存为即可,不推荐使用批量编码转换工具对模版进行编码转换,容易出现问题,转换完毕后,重新上传,便可以使用了!
校验是否转换成功
进入新论坛Discuz后台,选择站长-数据库-校验,进行数据库校验,若提示“您的数据库完整无误”则是转换完美成功,否则请将检测出编码不正常的数据表导出,然后用上面的替换法转换编码后,删除数据库中的对应数据表,再导入即可!
迁移为主论坛
至此,整个转换过程便结束了!若到此处都还没有出现问题,那么老论坛的备份就可以删除了,删除老论坛的数据表和程序文件后,新论坛便可以复制到老论坛所在的目录,不过我个人觉得数据库是没有必要更换的,删掉老论坛的数据库就行,注意:若迁移涉及到域名的变化,一定要到后台修改Ucenter的通信地址,进入Ucenter看到通信成功,即为迁移成功!(由于UC的数据库也被恢复,通信密钥可能为老论坛的,请注意更换,否则无法通信成功)
小问题
由于UTF-8和GBK论坛的部分数据表有结构上的不同,这样硬转换后可能导致部分功能不正常,如设置个人资料,转换后极其有可能出现问题,请参考此贴方法解决(Discuz! X3测试通过):
总结
这种转换方法成功率非常高,但是稍显麻烦,对站长朋友的技术基础也有一定要求,小白站长还是不要尝试了,这种方法转换后,后台设置基本能够比较完整的保存下来,用户名等也不会出现乱码(至今我还没有发现任何地方有乱码情况的出现),不过转换极小部分后台数据会造成丢失,不过并不影响正常使用,只需简单设置即可!