mysql4升级到5后Java系统出现乱码问题

  由于mysql 4和5默认的编码不一致,以前好几次遇到这样的问题,都因为不知到如何解决最终放弃mysql的升级。这次有个安装了WebCL平台的客户不得不升级,只好横下一条心摸索出解决办法。忙了一下午后,终于摸索出了一个比较圆满的解决方案:

  1. 将原属于mysql 4的数据库文件夹拷贝到mysql 5的data目录下,并重命名(如将webcldb改成webcldb1),进入mysql 5的bin目录,通过mysqldump命令导入原来数据库的数据结构,如:mysqldump -u root -p -d --opt webcldb1 > d:/webcldb_s.sql。其中参数-d表示只创建数据表结构,不生成插入记录的insert语句。导完后,用文本编辑器打开webcldb_s.sql文件,每个create table语句后面指定了表格的编码是latin1,将所有的“latin1”替换成“GBK”。

  2. 再用mysqldump命令导入原来数据库的数据,如:mysqldump -u root -p -n -t --compatible=mysql40 --opt webcldb1 > d:/webcldb_d.sql。其中,参数-n -t表示不生成创建数据库和数据表结构的语句,只生成插入记录的insert语句;参数--compatible=mysql40 可以保证导出的insert语句中中文不是乱码。导出后,确认webcldb_d.sql文件中的中文正常。(之所以将数据库结构和数据导出分开,是为了方便将数据库结构导出文件中的“latin1”替换成“GBK”,如果结构和数据在一个文件中,该文件会很大,替换效率会很慢甚至无法替换)。

  3. 进入mysql 5的mysql命令,创建一个新的数据库,并指定数据库的默认编码是GBK,命令如下:CREATE DATABASE WEBCL2DB DEFAULT CHARACTER SET GBK。

  4. 然后进入新创建的数据库,导入数据库结构和数据,如:source e:/webcldb_s.sql和source e:/webcldb_d.sql。(这个步骤我原来计划用mysqldump导入命令,但不知道是数据库原有的数据格式还是其他什么问题,尝试了多次都失败,后来才改用了source命令)。

  这样顺利将原来的数据库从mysql 4.0系统升级导了mysql 5.0系统中,如果确认无误,原来重命名后的数据库文件夹就可以删除了。