谈谈怎样解决JSP数据插入MySql乱码的问题。

来源:互联网 发布:天下3鬼墨捏脸数据 编辑:程序博客网 时间:2024/05/16 18:48

       关于MySlq中文乱码的问题相信刚刚开始学习的时候大家都遇到过,本人也是深受其害的,网上也有很多解决的办法但是说的都不怎么详细,今天就总结下几种MySql数据库中文乱码的解决方法相信对新手来说会有一定的帮助。



     我所使用的是MySql5.0版本的在安装完成的时候会提示进行数据库配置,配置好字符集就不用再重新修改mysql.ini文件了,这里一定要这么选择utf-8为数据库默认字符集,


其他的就不用多说了,如果在安装的时候没有配置也可以更改mysql.ini文件,具体更改方法:将里面的default-character-set=latin1 改为default-character-set=utf8,记住有两处可修改的地方,然后重起mysql服务即可将数据库默认字符集改为utf8.此时应该在mysql命令行用/s命令检查一下看是否改好了。


     数据库的默认字符集配置好了,然后就是JSP页面的设置,页面编码统一设置为,

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


     相信大家都喜欢用一些Mysql的可视化管理工具,这里要注意在创建数据库的时候字符集一定要统一,也就是都要使用utf-8,根据个人环境的不同有些这样设置可能不出现乱码了,如果还是出现的话那就请继续看,给自己的项目加上文件过滤器,详细代码请看:

 

package com.register;

 

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;
         protected boolean ignore = true;
         public void destroy() {

                  this.encoding = null;

                  this.filterConfig = null;
         }
         public void doFilter(ServletRequest request, ServletResponse response,

                          FilterChain chain) throws IOException, ServletException {

                  // Conditionally select and set the character encoding to be used

                  if (ignore || (request.getCharacterEncoding() == null)) {

                          String encoding = selectEncoding(request);

                          if (encoding != null) {

//                                System.out.println(encoding);

                                   request.setCharacterEncoding(encoding);
                          }

//                       System.out.println("Null");

                  }

                  chain.doFilter(request, response);
         }
         public void init(FilterConfig filterConfig) throws ServletException {

                  this.filterConfig = filterConfig;

                  this.encoding = filterConfig.getInitParameter("encoding");

                  String value = filterConfig.getInitParameter("ignore");

                  if (value == null)

                          this.ignore = true;

                  else if (value.equalsIgnoreCase("true"))

                          this.ignore = true;

                  else if (value.equalsIgnoreCase("yes"))

                          this.ignore = true;
                  else
                          this.ignore = false;
         }

         protected String selectEncoding(ServletRequest request) {

                  return (this.encoding);
         }
}

 

 

     不要忘记在web.xml还要配置:

 

<filter>

       <filter-name>SetCharacterEncoding</filter-name>

       <filter-class>

           com.register.SetCharacterEncodingFilter

       </filter-class>

       <init-param>

           <param-name>encoding</param-name>

           <param-value>utf-8</param-value>

       </init-param>

       <init-param>

           <param-name>ignore</param-name>

           <param-value>true</param-value>

       </init-param>

    </filter>

    <filter-mapping>

       <filter-name>SetCharacterEncoding</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

 

一切都配置好了现在试验下是不是乱码的问题已经解决了。