在学习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";
然后在打开该网页:
中文数据已经成功显示出来了。
更多详解:
持续更新......