我有Spring应用程序,使用JPA通过Hibernate实现。我不能使用西里尔符号,因为它们变成了“?”在数据库里。
1)将西里尔符号直接插入DB是可以的。
2)如果DB中有任何西里尔符号,则在网页上很好地显示它们。
3)我在web.xml中有这样一部分配置
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
....
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>4)在IDE cyrillic符号中调试(插入到DB之前)时显示OK,但插入后选择符号是‘?’。
5)我尝试将'accept-charset=UTF-8‘设置为'form’标记,尝试将字符UTFoding=UTF-8添加到DB中,尝试设置以下hibernate属性:
<property name="hibernate.connection.charSet" value="UTF-8"/>
<property name="hibernate.connection.characterEncoding" value="UTF-8"></property>
<property name="hibernate.connection.useUnicode" value="true"></property>还有什么不对的?为什么西里尔符号仍然会变成“?”?!
附注:Ubuntu13.04,MySQL 5.5,Spring3.2,SpringRoo1.2.3
upd:基本得到了解决方案:我生成了ru_RU和ru_RU.UTF-8系统区域设置,并将locale设置为ru_RU.UTF-8。详细说明是here。而且,我无法解释为什么,一切都很好!
p.p.s.不需要“5”中的characterEncoding和useUnicode属性。字符编码=UTF-8参数需要添加到连接字符串中。
发布于 2013-12-26 06:41:09
编辑MySQL设置/etc/mysql/my.cnf并强制所有连接遵守UTF-8:
[client]
default-character-set = utf8
[mysqld]
init-connect='SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_general_ci
[mysql]
default-character-set = utf8建议在重新配置数据库后重新创建数据库。
https://stackoverflow.com/questions/20771938
复制相似问题