数据库的乱码问题,一直都相当恼人,不过,要解决起来,其实也还是比较容易……
首先,需要设定数据库的编码,也就是要在数据库连接字串里面设置好编码:
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 阅读(819) 
评论(0)  编辑  收藏  所属分类: 
Java相关