JPA(Hibernate)西里尔字符

时间:2013-12-25 10:49:03

标签: hibernate spring-mvc character-encoding spring-roo cyrillic

我使用通过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参数添加到连接字符串。

1 个答案:

答案 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

建议在重新配置数据库后重新创建数据库。