2

我有使用通过 Hibernate 实现的 JPA 的 Spring Roo 应用程序。我不能使用西里尔符号,因为它们变成了“??????” 在数据库中。

1)直接将西里尔符号插入数据库是可以的。

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,尝试设置以下休眠属性:

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

还有什么可能是错的?为什么西里尔符号仍然变成'????' ?!

ps 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。详细说明在这里。而且,我无法解释为什么,一切正常!

不需要 '5' 中的 pps characterEncoding 和 useUnicode 属性。characterEncoding=UTF-8 参数需要添加到连接字符串。

4

1 回答 1

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

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

于 2013-12-26T06:41:09.783 回答