随笔-211  评论-26  文章-8  trackbacks-0
请将MySQL数据库的配置文件my.ini做如下修改:

[client]

port=3306

[mysql]

default-character-set=gbk

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

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

[mysqld]

default-character-set=utf8

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

  • 开发工具设置:
    • Dreamweaver 设置:
      菜单栏-->编辑-->首选参数-->新建文档-->默认编码-->选择UTF-
    • 特别重要:
              无论使用哪种开发工具,建议不要使用“点右键-->新建-->文本文档-->修改扩展名”的方法,而该方法是许多教程和书籍普遍介绍的方法,我因为这个走了很多弯路,希望各位引以为戒!
              给自己提个醒,在这里把原因说出来:
               几乎所有的文本编辑工具默认的字符编码为: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部分:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      建议使用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代码如下:

        <%@ page contentType="text/html; charset=utf-8" %>
        <%@ page import="java.sql.*" %>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>中文测试页面</title>
        </head>
        <body>
        <%!
        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() ;

        %>
        <table border=1 width=400>
        <tr >
            <td>id</td>
            <td>name</td>
        </tr>
        <%
           ResultSet rs = stmt.executeQuery("select * from books") ;
           while(rs.next()) {
            String id = rs.getString(1) ;
            String name = rs.getString(2);
        %>
        <tr>
            <td><%=id%></td>
            <td><%=name%></td>
        </tr>
        <%
           }
        %>
        </table>
        <%
           rs.close() ;
           stmt.close() ;
           conn.close() ;

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

        %>
        </body>
        </html>

  • posted on 2008-03-13 01:00 dragon 阅读(274) 评论(0)  编辑  收藏 所属分类: jsp mysql 乱码解决方案系列