我的Blog原文:http://ud03.kinoko.name/Archive/863/
如果你转换过程中出现: 乱码,丢帖,丢用户,丢版块,错误率过高,不是错误都被程序识别为错误,DV的UBB和DZ的UBB的差异 等等等等,认真的看完这篇文章,应该对你会有帮助的.
目的 : 通过试验的方式寻找一个从DV7.0 to Discuz!5.0.0(GBK,utf-8)最好的方法
使用程序 : 动网DvBBS 7.x Access to Discuz!5.0.0 转换程序 v1.3.3
环境一: WINXP IIS PHP5.1.4 MySQL5.0.24
DV7.0 ACC数据库500M
1.重复用户名问题
重复用户名 f*****g 不能被转换,uid = 924 ;
转换报告中有这么一行,我觉得好奇怪,原来的DV数据库是如何有两个一模一样的会员ID捏?是DZ的转换程序搞错了?
我打开MDB来看,我晕923,924,都是f*****g这个会员.
两个ID的注册时间均为:2003-11-24 10:32:36
923 最后登陆时间:2004-6-28 16:33:31
924 最后登陆时间:2003-11-24 10:55:18
ID924 是一个死帐号.不会影响最终转换结果的正确性,因为这个ID本来就是多余的,^_^
很显然DZ的转换程序转出来的结果是没有错的.
那是谁的错捏?IIS?MDB?ASP?DV?应该是其中的一个吧,iis嫌疑更大.
2.DZ5(GBK) VS DZ5(UTF8)
DZ5(GBK) 转换报告如下:
转换会员数据 失败 61 条,成功率:99.92744487%
转换主题与投票数据 失败 24 条,成功率:99.9350385708%
转换帖子数据 失败 337 条,成功率:99.9420524108%
转换短消息数据 失败 8 条,成功率:99.9873493785%
DZ5(UTF8) 转换报告如下:
转换会员数据 失败 63 条,成功率:99.9250660133%
主要错误是因为”非法用户名”,其次是”重复用户名”,也有几个用户名长度超过15的.
转换主题与投票数据 失败 24 条,成功率:99.9350385708%
转换帖子数据 失败 337 条,成功率:99.9420524108%
转换短消息数据 失败 8 条,成功率:99.9873146753%
提示错误是:”错误 1064:可能原因:1.数据超长或类型不匹配;2.数据库记录重复。”
个人分析主要原因是因为文字中含有”\“这个符号,因为这个符号我在sql语句中从来没有用到过,哈哈哈
适乎以比较僻的字,结尾,都会出现被莫名的加上一个”\”
例如:在MDB中是”簽名大集錦”,最后生成的SQL则是”簽名大集錦\”
测试结果表明:
在MySQL5.0.24 的环境下.
转换为GBK的出错率会小一些
环境二:MySQL4.1.21
DZ5(GBK) 转换报告如下:
转换会员数据 失败 61 条,成功率:99.92744487%
转换主题与投票数据 失败 24 条,成功率:99.9350385708%
转换帖子数据 失败 337 条,成功率:99.9420524108%
转换短消息数据 失败 8 条,成功率:99.9873493785%
DZ5(UTF8) 转换报告如下:
转换会员数据 失败 63 条,成功率:99.9250660133%
转换主题与投票数据 失败 24 条,成功率:99.9350385708%
转换帖子数据 失败 337 条,成功率:99.9420524108%
转换短消息数据 失败 8 条,成功率:99.9873146753%
环境三:MySQL4.0.27
DZ5(GBK) 转换报告如下:
转换会员数据 失败 464 条,成功率:99.4481052406%
DZ5(UTF8) 转换报告如下:
转换会员数据 失败 464 条,成功率:99.4481052406%
4.0.27这个版本,虽然说只有会员数据出错,但是出错率太高了,没有重复的用户名也被识别为重复的用户名了.可以说是根本不正确的.
| Mysql-5.0.24 | Mysql-4.1.21 | Mysql-4.0.27 | GBK | UTF-8 | GBK | UTF-8 | GBK | UTF-8 | 转换会员数据失败数 | 61 | 63 | 61 | 63 | 464 | 464 | 转换主题与投票数据失败数 | 24 | 24 | 24 | 24 | 0 | 0 | 转换帖子数据失败数 | 337 | 337 | 337 | 337 | 0 | 0 | 转换短消息数据失败数 | 8 | 8 | 8 | 8 | 0 | 0 | 转换后数据大小 | 292.5 | 355.3 | 281.2 | 344.0 | 242.4 | 242.4 | 转换后显示出来的结果 | 正常 | 正常 | 正常 | 正常 | 正常 | 乱码 |
其他发现:
GBK转换报告中,有2个提示重复用户名的在UTF-8转换报中没有出现提示.
UTF-8转换报告中,有4个提示重复用户名的在GBK转换报中没有出现提示.
这六个用户名已查证,在MDB数据库中都不是重复的用户名.
由此看出转换程序并完善,再有必要的情况下,最好手动检查一下:报错的数据是否真实.
当然不真实的就自己手动添加上去了,哈哈哈
mysql4.0 + DZ(GBK)是一个最不好的搭配,为什么怎么说捏?看看这副图你就会明白了.
所以为什么会有464个会员名字不能转换了,当然这不是DZ的错,^_^ (具体原因请看十楼)
转换技巧:
1.登陆DV的后台在 上传头像管理 ,上传文件管理 中清理多余的上传文件
2.因为DZ只支持3级分类,转换前先对论坛的4级分类做一些处理,比如说新建一个4级分类的版块出来,移动全部4级分类版块过去,以此类推.(如果DV的程序移动帖子有问题,那么你只能在转换后用DZ来一个一个版块复位了)
3.DZ的主分类,也就是第一分类,不允许有帖子,所以,你要新建一个版块,在该主分类下面,然后后转移帖子到新建的版块下.(如果DV的程序移动帖子有问题,也不要要紧,帖子都还是真实存在于mysql中的,想办法把它移动出来就可以了.)
不管你是合并,还是移动,还是新建版块的方式.总之就是想尽一切办法在还没有转换之前,就把论坛调整成 一级分类没有帖子,不存在四级版块.
4.转换程序中的$discuz_charset = 'gbk'; 这个值,最好不要修改,保持为gbk,不然会遇到N多的错误和乱码.
最终我使用的转换方法如下:
1.用mysql4.0 ,新建一个空DZ5(GBK)论坛bb1
2.在bbs1,转好一个全部数据,登陆后台备份(全部数据,建表语句格式MySQL 4.1.x/5.x)得到数据A.
3.用mysql5.0 ,新建一个空DZ5(GBK)论坛bb2
4.在bbs2的后台,导入数据A
5.在bbs2中再次使用转换程序,只转换会员数据,这样就做好一个DZ5 (GBK,Mysql5.0)的转换了.
6.最后在转换结果报表中添加一些你认为不是非法用户名的用户(如果你使用GBK的话,到此就可以结束了)
7.将bbs2备份,强制utf8,这样就生成了数据C
8.用mysql5.0 ,新建一个空DZ5(UTF-8)论坛bb3
9.将刚刚备份好的数据C导入bb3. 最终得到一个错误率最低的 DZ5 (UTF-8,Mysql5.0)
我修改的转换程序
我自己对转换程序进行的修改,更加人性化一些.
(2006-09-07更新修正了威望和金钱的小小小错误)
对现有转换程序的意见:
report.htm这一个显示的结果太多,如果错误率比较高的话,那这个文件就太大了,在IE显示报告都会比较慢
可以考虑分页显示report_01.htm,report_02.htm,report_03.htm,report_04.htm………
dvbbs这文件夹应该写成变量.这样可以给用户更好的DIY比如叫oldbbs,bbs01什么的.
呵呵,因为我不想让别人知道我以前用过什么论坛程序.
9月07更新的代码是这个,官方可以see一下,我的坛子转好以后发现 DV的威望变成金钱,金钱变成威望了。
如果已经转好的朋友可以用phpmyadmin改字段名就解决了。
- $extcredits4 = $user['userep']; //经验值
- $extcredits1 = $user['userpower']; //威望
- $extcredits2 = $user['userwealth']; //金钱
- $extcredits3 = $user['usercp']; //魅力
复制代码
偷懒,我自己就不写,留给DZ的开发人员搞定吧,哈哈哈哈
[ 本帖最后由 spzgy 于 2006-9-7 12:55 编辑 ] |