最近玩的项目里面用的H2,Hibernate的import.sql里面插入了一条中文的数据,结果是乱码,搞了半天没有解决。网上关于H2连接相关的资料比较少,关于解决mysql乱码问题的文章比较多,于是把数据库切换到了mysql,但问题依然存在。
并且已经确定了mysql数据库的encoding、import.sql的encoding都是utf8。
包括hibernate配置文件中关于Mysql连接的配置
<property name="hibernate.connection.CharSet">utf-8</property>
<property name="hibernate.connection.characterEncoding">utf-8</property>
<property name="hibernate.connection.useUnicode">true</property>
经过一番调查,终于解决了。
解决办法
- step(1/2)
eclipse菜单-Run-Run Configuration
找到自己的WEB服务器,我用的是Tomcat v6.0
右边TAB-Arguments-VM arguments
这里最后面加入一个参数
-Dfile.encoding=UTF8
这是JVM的一个参数,代表JAVA读写文件时用的默认的encoding。
关于参数的详细可以参考这篇
Java -Dfile.encoding=UTF-8 遭遇乱码问题的来龙去脉 - step(2/2)
还是上面的Run Configuration菜单
在右边TAB中招到common,然后Encoding
这里默认是系统的字符集,改成UTF-8
这个配置是用来修改eclipse console的encoding的。
修改完以后,再用hibernate导入import.sql,就不乱码了。
即使去掉这些配置也没关系
<property name="hibernate.connection.CharSet">utf-8</property>
<property name="hibernate.connection.characterEncoding">utf-8</property>
<property name="hibernate.connection.useUnicode">true</property>
再切换回H2数据库,同样一切正常。
此次问题得以解决,得力于这篇文章