2015-10-18 52 views
0

我正在创建一个Spring MVC Web应用程序。 Hibernate对MySQL数据库坚持的对象编码错误。数据来自.jsp页面表单,并使用POST方法传递给控制器​​方法。当持久化对象到MySQL数据库时,Hibernate不编码UTF-8

我已经尝试过应用的解决方案提出 herehere,但他们似乎并不管用。

这是我使用的头对我的JSP页面:

<%@page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 

这是我用我的应用程序的数据库配置文件:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://127.0.0.1:3306/database?useUnicode=yes&amp;characterEncoding=UTF-8 
jdbc.username=root 
jdbc.password=password 

hibernate.dialect=org.hibernate.dialect.MySQLDialect 
hibernate.hbm2ddl.auto=update 
hibernate.show_sql=false 
hibernate.format_sql=true 

我还添加了UTF -8在我的web.xml文件过滤器:

<filter> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 

我也试图通过运行一个COM改变我的数据库整理在MySQL Workbench中执行(尝试utf8,utf8_unicode_ci,utf8_polish_ci)。我试图只改变一个表(包含UTF-8字符串的表)的排序规则。

这一切都行不通。 UTF-8字符存储为“?”。我知道在持久化对象时发生错误,因为在持久化之前在控制台中打印对象,并且正确显示UTF-8。所以我认为问题在于Hibernate配置和/或MySQL数据库配置。

我会提供额外的配置文件,如果有必要的话。

下面是CREATE语句所涉及的表:

CREATE TABLE `table` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `string` varchar(255) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 
+0

那么我们可以知道你的MySQL模式是什么样的,是的 - 涉及的字段类型是什么? –

+0

数据库中的字段类型是VARCHAR(255)。 Java端的字符串。 – RK1

+1

你是否可以通过MySQL工作台存储非ASCII字符?如果你这样做,你能够在Java应用程序中检索它们吗?尽可能缩小问题的范围是值得的。 –

回答

2

你有没有核对正确设置MySQL的?它可以使用下面的语句来检查:

show variables like 'character%'; 
show variables like 'collation%'; 

要允许MySQL服务器上采用的是Unicode:

[mysqld] 
character-set-server = utf8 
character-set-filesystem = utf8 

希望有所帮助。

+0

工作正常。所以问题出在一般的MySQL配置设置而不是一个模式。谢谢。 – RK1

+0

不用担心,乐于帮忙。 – hd1

相关问题