我使用通过Hibernate实现的JPA的Spring Roo应用程序。我不能使用西里尔符号因为它们变成'????'在DB。
1)将西里尔符号直接插入DB即可。
2)如果数据库中有任何西里尔符号,它们在网页上显示正常。
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中,调试(插入到DB之前)西里尔符号显示OK,但插入后然后选择符号为'????'。
5)我试图将'accept-charset = UTF-8'attr设置为'form'标签,试图将characterEnc oding = UTF-8添加到DB URL,尝试设置以下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>
还有什么可能是错的?为什么西里尔符号仍然成为'????' ?!
P.S。 Ubuntu 13.04,MySQL 5.5,Spring 3.2,Spring Roo 1.2.3
upd:有趣地得到了解决方案:我生成了ru_RU和ru_RU.UTF-8系统区域设置并将区域设置设置为ru_RU.UTF-8。详细说明为here。并且,我无法解释为什么,一切正常!。
p.p.s。不需要'5'中的characterEncoding和useUnicode属性。 characterEncoding =需要将UTF-8参数添加到连接字符串。
答案 0 :(得分:2)
编辑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
建议在重新配置数据库后重新创建数据库。