一、环境:Hibernate 2.1.7+ MySQL4.1(MySQL的编码已设置为utf8)
二、问题::通过Hibernate向MySQL写入中文后,通过Hibernate取回数据,在console中打印java对象显示正常。但在MySQLQuery Browser中看到的是乱码,传给前端的Flex也是乱码。
三、原因:Hibernate的基础还是JDBC,所以一样需要设置characterEncoding!
四、解决方法:
a) mysql安装时设置字符集utf-8(包括数据库字符集,以及表的字符集), jdbc驱动用最新的
b) 更改hibernate配置文件,有两种解决方案,分别为:
i. <property>name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
如果用hibernate.properties
#hibernate.connection.urljdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
ii. 加上属性:
<propertyname="connection.useUnicode">true</property>
<propertyname="connection.characterEncoding">UTF-8</property>
c) 如果仍然出现乱码,建议设置一下web.xml的filter,初始化一下编码方式:
<filter>
<filter-name>
Set Web Application Character Encoding
</filter-name>
<filter-class>com.util.SetEncodeFilter</filter-class>
<init-param>
<param-name>defaultencoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>
Set Web Application Character Encoding
</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>