我正在创建一个Spring MVC Web应用程序。 Hibernate对MySQL数据库坚持的对象编码错误。数据来自.jsp页面表单,并使用POST方法传递给控制器方法。当持久化对象到MySQL数据库时,Hibernate不编码UTF-8
我已经尝试过应用的解决方案提出 here 和here,但他们似乎并不管用。
这是我使用的头对我的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&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;
那么我们可以知道你的MySQL模式是什么样的,是的 - 涉及的字段类型是什么? –
数据库中的字段类型是VARCHAR(255)。 Java端的字符串。 – RK1
你是否可以通过MySQL工作台存储非ASCII字符?如果你这样做,你能够在Java应用程序中检索它们吗?尽可能缩小问题的范围是值得的。 –