您好朋友,感谢您关注xiaosilent,我在blogjava的博客已经停止更新,请访问http://kuan.fm了解我的最新情况,谢谢!
随笔-82  评论-133  文章-0  trackbacks-0

数据库的乱码问题,一直都相当恼人,不过,要解决起来,其实也还是比较容易……

首先,需要设定数据库的编码,也就是要在数据库连接字串里面设置好编码:
url=jdbc:mysql://localhost:3306/databaseName?useUnicode=true&characterEncoding=UTF-8
在建立数据库连接的时候,再指定用户名和密码就可以了。

随后,需要在数据库和数据表里都设定好编码:
CREATE DATABASE `db` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `db`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
   `username` char(20) default NULL COMMENT '用户名',
   `password` char(20) default NULL COMMENT '密码',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;



最后是设定JSP文件的编码,
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

或者是用个Filter:

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;

/**
 * 字符编码过滤器
 * 
 * 
@author  xiaosilent.
 * 
 
*/
public   class  CharacterEncodingFilter  implements  Filter {

    
protected  FilterConfig filterConfig;

    
private  String targetEncoding  =   " UTF-8 " ;

    
/**
     * 初始化过滤器,获取初始化参数,如果没有设定则使用默认的UTF-8编码.
     
*/
    
public   void  init(FilterConfig config)  throws  ServletException {

        
this .filterConfig  =  config;

        
//  如果在web.xml里定义了编码,则获取,否则使用默认的UTF-8.
         if  (config.getInitParameter( " encoding " !=   null ) {

            
this .targetEncoding  =  config.getInitParameter( " encoding " );
        }

    }

    
public   void  doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) 
throws  IOException, ServletException {

        request.setCharacterEncoding(targetEncoding);
        response.setCharacterEncoding(targetEncoding);

        chain.doFilter(request, response);

    }

    
public   void  destroy() {

        filterConfig 
=   null ;

    }

}
在web.xml里加入:  <filter>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>xiao.cms.filter.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
这里使用的是UTF-8,所以没有指定参数,如果用非UTF-8编码,指定一个名为encoding的参数即可.


经过这样三个步骤,就不存在乱码问题了。

另,不推荐用 MySQL-Front 这个客户端程序管理UTF-8编码的数据库。如果是GBK编码还可以考虑,UTF-8则会出现编码问题,导致程序不能正常工作,强烈推荐 Navicat 。 功能强大,默认使用UTF-8编码,界面友好、美观。

posted on 2007-01-17 20:55 xiaosilent 阅读(803) 评论(0)  编辑  收藏 所属分类: Java相关

只有注册用户登录后才能发表评论。


网站导航: