Mysql Unicode字符保存不正确
我有一个mysql数据库,其中包含unicode文本字符串。我的JSF应用程序(在Tomcat6上运行)可以读取这些unicode字符串并在浏览器中正确显示它们。所有html字符集都设置为UTF-8 当我保存我的对象时,即使没有做任何更改,Hibernate也会将其保存回数据库。如果我现在直接查看数据库,我会发现带有口音的字符已经变成了垃圾 我的数据库连接字符串是:Mysql Unicode字符保存不正确,mysql,hibernate,jsf,unicode,jdbc,Mysql,Hibernate,Jsf,Unicode,Jdbc,我有一个mysql数据库,其中包含unicode文本字符串。我的JSF应用程序(在Tomcat6上运行)可以读取这些unicode字符串并在浏览器中正确显示它们。所有html字符集都设置为UTF-8 当我保存我的对象时,即使没有做任何更改,Hibernate也会将其保存回数据库。如果我现在直接查看数据库,我会发现带有口音的字符已经变成了垃圾 我的数据库连接字符串是: <property name="hibernate.connection.url"
<property name="hibernate.connection.url"
value="jdbc:mysql://database.address.com/dbname?autoReconnect=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8"/>
将该字符编码更改为UTF-8而不是utf8没有任何区别
事实上,几天前它肯定还在工作,但现在不行了,我不知道该检查什么。你有什么建议吗?我可以提供任何被认为相关的进一步信息。这只发生在某些表格上吗?这些表的默认字符集可能与其他表不同。()我想到了一些解决方法:
- 如果使用facelets,请在页面顶部指定
- 如果使用JSP,请指定
- 如果这不起作用,则创建一个映射到Facesservlet的过滤器,并执行
request.setCharacterEncoding(“utf-8”)
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class UnicodeFilter implements Filter {
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
// Set the characterencoding for the request and response streams.
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html; charset=UTF-8");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
在web.xml中:
<filter>
<filter-name>utffilter</filter-name>
<filter-class>utils.UnicodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>utffilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
乌特菲尔特
utils.unicorfilter
乌特菲尔特
/*
我找到的一个最简单的解决方案是
编码过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
编码过滤器
/*
确保UTF-8编码页面能够显示特定字符
并正确提交
将此筛选器添加到web.xml
编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码滤波器
/*
删除res.setContentType()
,这样做弊大于利。Bozho已经建议使用req.setCharacterEncoding()
。有关更多详细信息和解决方案,请参见。这基本上只是请求.setCharacterEncoding(“UTF-8”),仅此而已。
<filter>
<filter-name>encoding-filter</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>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>