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 二、需要调整的参数: 请将MySQL数据库的配置文件my.ini做如下修改: [client] port=3306 [mysql] default-character-set=gbk #重要:这个设置的是MYSQL自带的命令行显示和输入的 #------------------------------------------------------------------------------------------------------------- [mysqld] default-character-set=utf8 #重要:这个设置决定MySQL的工作环境的字符集!数据库继承MySQL设置的字符集,而表则继承数据库的字符集,字段则继承表的字符集!所以这里设置很重要! 开发工具设置: 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部分:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 建议使用Dreamweaver自动生成JSP代码的必要部分! 三、实战测试! 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 JSP代码如下: <%@ page contentType="text/html; charset=utf-8" %> <%@ page import="java.sql.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "' target=_blank>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="' target=_blank>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> 本文出自 51CTO.COM技术博客 |


sushappy
博客统计信息
热门文章
最新评论
友情链接