mysql中的存储中文的问题解决方法
前些时候的做过一个实训是关于mvc的一个网站,其中遇到了很多问题因为时间的原因,把这些问题给省略掉了,最近又碰到了这些问题,这次无论怎样都要把问题解决掉一个是mysql存储中文的问题(在库中显示的是????),我相信大部分人的问题应该都是这样子的....
现在我把我的解决方法总结一下(当人也是从网上看一些大侠们的方法,加上自己的感想,如有雷同,敬请谅解)。
第一,编码的问题是首当其冲要解决的,我个人的用的是utf-8的(gbk的没有试过)。
先要把你的mysql的编码设置为UTF-8。
如果想方便的话可以在mysql的根目录下找到 my.ini 陪置文件,把[mysql] default-character-set=编码。中的编码改成utf8(注意是utf8不是utf-8)。
第二,然后在连接数据库的时候,代码后面加上useUnicode=true&characterEncoding=utf-8,格式为
DriverManager.getConnection( "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8",user,password);这样做的目的是连接数据的时候都是采用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 SetCharacterEncodingFilter implements Filter {
- protected String encoding = null;
- protected FilterConfig filterConfig = null;
- public void init(FilterConfig filterConfig) throws ServletException {
- this.filterConfig = filterConfig;
- this.encoding = filterConfig.getInitParameter("encoding");
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- request.setCharacterEncoding("UTF-8");
- System.out.println("执行");
- chain.doFilter(request, response);
- }
- public void destroy() {
- this.encoding = null;
- this.filterConfig = null;
- }
- protected String selectEncoding(ServletRequest request) {
- return (this.encoding);
- }
- }
然后就是在web。xml文件中配置(现在的tomcat版本,可以自动检查是够更新,所以不用重启,稍等片刻就可以了)
- <filter>
- <filter-name>Set Character Encoding</filter-name>
- <filter-class>com.bean.SetCharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>Set Character Encoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
如果还不能解决的,你可以给我留言,咱们共同解决,如果有什么不对的地方,请各位指出,咱们共同探讨....