Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2566023
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: Mysql/postgreSQL

2007-07-21 11:00:38

JSP+MYSQL中文乱码问题解决方案-UTF8篇

别的就不多说了,开门见山吧:

一、测试平台:

数据库:mysql5.0版
JDBC.Driver 版本:5.0
开发工具:支持修改内码的工具--Macromedia Dreamweaver 8或EDITPLUS;经过本人测试,发现UltraEdit-32对UTF-8支持好象不是很好!如我设置错了。还请高人留言指点,小弟再此谢过!
Java版本:1.5
浏览器:IE6.0SP2;Opera 9.2

二、需要调整的参数:

  1. 请将MySQL数据库的配置文件my.ini做如下修改:

    [client]

    port=3306

    [mysql]

    default-character-set=gbk

    #重要:这个设置的是MYSQL自带的命令行显示和输入的

    #-------------------------------------------------------------------------------------------------------------

    [mysqld]

    default-character-set=utf8

    #重要:这个设置决定MySQL的工作环境的字符集!数据库继承MySQL设置的字符集,而表则继承数据库的字符集,字段则继承表的字符集!所以这里设置很重要!

  2. 开发工具设置:
    • Dreamweaver 设置:
      菜单栏-->编辑-->首选参数-->新建文档-->默认编码-->选择UTF-8
    • EditPlus设置:
      菜单栏-->工具-->参数-->文件-->默认编码-->选择UTF-8
    • 特别重要:
              无论使用哪种开发工具,建议不要使用“点右键-->新建-->文本文档-->修改扩展名”的方法,而该方法是许多教程和书籍普遍介绍的方法,我因为这个走了很多弯路,希望各位引以为戒!
              给自己提个醒,在这里把原因说出来:
              几乎所有的文本编辑工具默认的字符编码为:ANSI或是ISO-8859-1;UltraEdit-32默认编码就是IS0-8859-1;而EditPlus则默认为ANSI编码!ISO-8859-1编码就不用多说了,我们输入中文然后删除的话,可能会出现只删除掉半个字符的情况,就是因为默认字符编码的问题!而ANSI编码则是多字节字符集,根据你操作系统的内码来决定字符集!我们使用的是windows中文系统,所以操作系统内码是GBK或是GB18030编码字符集!因此用EditPlus输入中文是没问题的!用来输入UTF-8字符肯定是有问题的!所以一定要严格按照上面的步骤操作!
    • JSP 文件的配置指令:
      JSP部分:<%@  page contentType="text/html; charset=utf-8" %>
      HTML部分:
      建议使用Dreamweaver自动生成JSP代码的必要部分!

三、实战测试!

  1. Mysql命令行操作:
    帐号:root 密码123456
    create databse dbtest ;
    use dbtest ;
    cretae table books (id varchar(8),name varchar(90)) ;
    测试下命令行输入中文:
    insert into books (id,name) values('1','张三在吃早饭') ;
    select * from books ; 应该可以正常显示中文
     查看下该表的字符编码方式:
    show create table books ; 请确定是charset=utf8
  2. JSP代码如下:

       
       
     
      <%
      ResultSet rs = stmt.executeQuery("select * from books") ;
      while(rs.next()) {
       String id = rs.getString(1) ;
       String name = rs.getString(2);
    %>
     
       
       
     
      <%
      }
    %>

    <%@ page contentType="text/html; charset=utf-8" %>
    <%@ page import="java.sql.*" %>




    中文测试页面


    <%!
     final String dbDriver = "com.mysql.jdbc.Driver" ;
     final String dbUrl = "jdbc:mysql://localhost:3306/dbtest" ;
     final String dbUser = "root" ;
     final String dbPassword = "123456" ;
     Connection conn  ;
     //PreparedStatement prepStmt  ;
     Statement stmt ;


    %>
    <%
     try {
      Class.forName(dbDriver) ;
      conn = DriverManager.getConnection(dbUrl,dbUser,dbPassword) ;
     
      String sql = "insert into books(id,name) values('3','中国')" ;
      stmt = conn.createStatement() ;
      stmt.executeUpdate(sql) ;
      //prepStmt = conn.prepareStatement(sql) ;

      //prepStmt.setString(2,"这是一个中文测试") ;
      
      //prepStmt.setString(3,"显示就表明测试正确") ;

      //prepStmt.executeUpdate() ;
      
      //prepStmt.close() ;

    %>

     

    idname
    <%=id%><%=name%>

    <%
      rs.close() ;
      stmt.close() ;
      conn.close() ;

     }catch(Exception e) {
      out.println("失败");
      e.printStackTrace();   
     }

    %>


四、结束语:

本文系作者本人原创,为了方便自己以及和自己一样对中文乱码有疑惑的朋友!希望大家批评指正!如果转载,请指名出处!谢谢!

阅读(4522) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~