公司终于还是决定买jira。于是要开始把bugzilla上面原有的bug数据迁移到jira上面。
一开始考虑的方法是导出成csv文件再在jira中导入,可是这样做的话很多关联的数据就很难处理,而且所有的附件(截屏)都无法迁移。
搜索了一下,http://www.atlassian.com/software/jira/docs/v3.1.1/bugzilla_import.html 上面介绍说现在直接从mysql迁移数据过来已经可以保留所有附件了,不过看到其他一些人的评论,估计迁移过程还是会有各种麻烦。先不管,按照说明动手倒倒看。果然出错了:
Select Bugzilla projects to import |
Step 2 of 3: Select Bugzilla projects to import |
Form Errors:
- Error importing data from bugzilla: java.sql.SQLException: Unknown type '246 in column 25 of 28 in binary-encoded result set. at com.mysql.jdbc.MysqlIO.extractNativeEncodedColumn(MysqlIO.java:3710) at com.mysql.jdbc.MysqlIO.unpackBinaryResultSetRow(MysqlIO.java:3620) at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1282) at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2198) at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:413) at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:1899) at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1347) at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1393) at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:958) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1705) at com.atlassian.jira.util.BugzillaImportBean.createIssues(BugzillaImportBean.java:224) at com.atlassian.jira.util.BugzillaImportBean.create(BugzillaImportBean.java:169) at
......
|
查了一下,有可能是数据库版本太高造成的。因为bugzilla和其他的项目共用了一个mysql5.0,Unknown type '246 大概是mysql5.0里面新的数据类型标记,旧的jdbc连接器无法识别它。
上 http://downloads.mysql.com/snapshots.php 下了最新的connector(就是jdbc驱动)回来解压后把里面的jar文件放到jira的WEB-INF/lib目录下,关掉jira后删掉旧的connector,重开jira,迁移成功了。
进jira看看,bug都过来了,附件也都可以看,可是全部中文提示都变成乱码了
试试将jdbc的url加上useUnicode=true&characterEncoding=gbk,还是一样。
在clark的提醒下,改了my.ini里面的default-character-set=latin1改成default-character-set=gbk了,不但jdbc出来的仍旧是乱码,连bugzilla都显示乱码了,还是改回去。
上网继续搜,终于在java 与 mysql 中文问题的处理 看到了令人比较满意的解释:Mysql的connectorJ里面有bug(可是这么久了就是没有改正呢?)。现在有两个解决方案,一是改mysql的源码,自己编译connectorJ,二是是改BugzillaImportBean.java 的代码,自己编译并替换jira的BugzillaImportBean.class
网上 有人在抱怨BugzillaImportBean.java很不好改,那么长一串import要一个一个添到classpath里面都要办天,不知道那位老兄是不是只用VI写java的。我们用IDE的比他幸福多了。在jira目录下搜出来全部jar文件,拷贝到一个目录下,然后在JBuilder的config libraries 里面添加一个jira目录,把这下jar文件全部天到这个目录下,顺便把jira的classes目录的路径也添加到这个目录下,然后开一个工程引用这个目录进来,在工程里面建com.atlassian.jira.util包,然后把BugzillaImportBean.java放进去就可以编译通过了。改一个试试看:
fields.put(IssueFieldConstants.SUMMARY, new String(resultSet.getString("short_desc").getBytes("ISO8859-1")));
编译后替换调jira的BugzillaImportBean.class,果然不错。
改后的完整源码和编译后的类文件在这里。
至于方案一,请看我的另一篇文章:MySQL 的jdbc为何不能正确的编码汉字