在学习JavaWeb过程中,总会出现各种各样的中文乱码,而在JSP连接mysql数据库并且导出数据时,会出现中文乱码。
JSP代码如下:
<%@ page contentType="text/html" pageEncoding="GBK" %> <%@ page import="java.sql.*"%> <html> <head><title>www.mldn.com</title></head> <body> <%! //定义数据库驱动 public static final String DBDRIVER="org.gjt.mm.mysql.Driver"; //数据库连接地址 public static final String DBURL="jdbc:mysql://localhost:3306/mldn"; public static final String DBUSER="root"; public static final String DBPASS="mysqladmin"; %> <% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; %> <% try{ Class.forName(DBDRIVER); conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); String sql = "SELECT empno,ename FROM emp"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); %> <center> <table border="1" width="80%"> <tr> <td>雇员编号</td> <td>雇员姓名</td> </tr> <% while(rs.next()){ int empno = rs.getInt(1); String ename = rs.getString(2); System.out.println(ename); %> <tr> <td><%=empno%></td> <td><%=ename%></td> </tr> <% } %> </table> </center> <% }catch(Exception e){ System.out.println(e); }finally{ rs.close(); pstmt.close(); conn.close(); } %> </body> </html> 打开Tomcat,在本地服务器上打开JSP后,会出现如图中文乱码:同时,在将获取的数据输出到Tomcat服务器上进行观察。
输出的同样是问号。
根据网上的方法,修改mysql配置中的my.ini的服务器和客户端的default-character-set为utf8,结果仍然是输出??????。
现在来看看mysql的charset情况:
输入show variables "character%";和show variables "%colla%"; 查看如下图:
可以观察到,character_set_database latin1和collation_server这两项都没有变为utf8,这就是问题的所在。
为了避免这种情况,有两种方法可以解决问题。
方法一:修改character_set_database和collation_server这两项。
输入:(此处以数据库mytest为例)ALTER DATABASE mytest DEFAULT CHARACTER SET utf8; 修改 character_set_database
然后输入:ALTER DATABASE mytest DEFAULT COLLATE utf8_general_ci;
这样就修改成功了。
可是,当如果Bruis数据库中的DEFAULT CHARSET=latin1 时,仍然会出现中文问号。可以输入show create table Bruis.emp;查看。
(这里本人用的数据库为Bruis,数据库mytest为用于测试)
方法二:可以通过在创建数据库与建表时,就设置charset为utf8。
进入dos界面,net start mysql(开启mysql)——>mysql -uroot -pmysql(进入mysql指令)——>
CREATE DATABASE Bruis
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
——>
CREATE TABLE emp(
emp INT(4) PRIMARY KEY,
ename VARCHAR(10)
) ENGING=InnoDB DEFAULT CHARSET=utf8;
如下图:
以上两种方法弄好之后,还需要设置一下character_set_results:
而character_set_results的修改可以通过输入:SET NAMES utf8或者(gbk);就可以实现。
修改之后如图:
以上都弄好之后
然后再在JSP如下代码中修改数据库为Bruis(本人使用的是数据库Bruis)
public static final String DBURL="jdbc:mysql://localhost:3306/Bruis";
然后在打开该网页:
中文数据已经成功显示出来了。
更多详解:
持续更新......