我有使用通过 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' 标签,尝试将 characterEncoding=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 参数需要添加到连接字符串。