从bugzilla迁移数据到jira

公司终于还是决定买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.0Unknown type '246 大概是mysql5.0里面新的数据类型标记,旧的jdbc连接器无法识别它。

http://downloads.mysql.com/snapshots.php下了最新的connector(就是jdbc驱动)回来解压后把里面的jar文件放到jiraWEB-INF/lib目录下,关掉jira后删掉旧的connector,重开jira,迁移成功了。

jira看看,bug都过来了,附件也都可以看,可是全部中文提示都变成乱码了<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 14.25pt; HEIGHT: 14.25pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif" o:href="http://blog.csdn.net/fckeditor/editor/images/smiley/msn/confused_smile.gif"></imagedata></shape>

试试将jdbcurl加上useUnicode=true&characterEncoding=gbk,还是一样。

clark的提醒下,改了my.ini里面的default-character-set=latin1改成default-character-set=gbk了,不但jdbc出来的仍旧是乱码,连bugzilla都显示乱码了,还是改回去。

上网继续搜,终于在java mysql 中文问题的处理 看到了令人比较满意的解释:MysqlconnectorJ里面有bug(可是这么久了就是没有改正呢?)。现在有两个解决方案,一是改mysql的源码,自己编译connectorJ,二是是改BugzillaImportBean.java 的代码,自己编译并替换jiraBugzillaImportBean.class

网上 有人在抱怨BugzillaImportBean.java很不好改,那么长一串import要一个一个添到classpath里面都要办天,不知道那位老兄是不是只用VIjava的。我们用IDE的比他幸福多了。在jira目录下搜出来全部jar文件,拷贝到一个目录下,然后在JBuilderconfig libraries 里面添加一个jira目录,把这下jar文件全部天到这个目录下,顺便把jiraclasses目录的路径也添加到这个目录下,然后开一个工程引用这个目录进来,在工程里面建com.atlassian.jira.util包,然后把BugzillaImportBean.java放进去就可以编译通过了。改一个试试看:

fields.put(IssueFieldConstants.SUMMARY, new String(resultSet.getString("short_desc").getBytes("ISO8859-1")));

编译后替换调jiraBugzillaImportBean.class,果然不错。


改后的完整源码和编译后的类文件在这里

至于方案一,请看我的另一篇文章:MySQL 的jdbc为何不能正确的编码汉字

你可能感兴趣的:(java,mysql,jdbc,F#,fckeditor)