mysql乱码问题

来源:互联网 发布:平面图制作软件 编辑:程序博客网 时间:2024/06/10 01:56

创建的table格式为:

create table emp(

empno INT(4)  PRIMARY KEY,

ename VARCHAR(10),

job VARCHAR(9),

hiredate DATE,

sal FLOAT(7,2)

};

表建好后mysql中


发现是没有乱码的,但是通过jsp读取后发现完全不支持中文。

jsp代码如下:

<%@ page contentType="text/html" pageEncoding="gbk"%><%@ page import="java.sql.*"%><html><head><title>www.mldnjava.cn, MLDN高端Java培训</title></head><body><%!public static final String DBDRIVER = "com.mysql.jdbc.Driver";public static final String DBURL = "jdbc:mysql://localhost:3306/mldn";public static final String DBUSER = "root";public static final String DBPASS = "123";%><%Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;%><%try {Class.forName(DBDRIVER);//数据库驱动程序加载conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);//取得数据库连接String sql = "SELECT empno, ename, job, sal, hiredate FROM emp";pstmt = conn.prepareStatement(sql);//实例化preparedStatementpstmt.execute("set names gbk");rs = pstmt.executeQuery();//执行查询操作%><center><table border = "1" width = "80%"><tr><td>雇员编号</td><td>雇员姓名</td><td>雇员工作</td><td>雇员工资</td><td>雇员日期</td></tr><%while(rs.next()) {int empno = rs.getInt(1);String ename = rs.getString(2);String job = rs.getString(3);float sal = rs.getFloat(4);java.util.Date date = rs.getDate(5);%><tr><td><%=empno%></td><td><%=ename%></td><td><%=job%></td><td><%=sal%></td><td><%=date%></td></tr><%}%></table></center><%} catch(Exception e) {System.out.println(e);}finally{rs.close();pstmt.close();conn.close();}%></body></html>

原因分析如下:

1.数据库中为什么能够正常显示?

因为数据库的编码方式是一定的,当我通过客户端进行建表后,服务器端按照特定的编码方式进行存储。当我再从客户端读取服务器端的数据时,服务器端按照原先的编码方式返回,所以能够看到中文。

2.以jsp方式为什么不能够正常显示中文?

因为我在jsp中指定了pageEncoding的方式,如果和数据库服务器端的编码方式不同,那么就不能保证能够正常显示中文了。


解决方法:

运行mysql的安装目录下/bin/MySQLInstanceConfig.exe


选择gbk方式(和jsp方式相同,当然其他支持中文的也可以)(目测这一步的本质就是修改了my.ini文件),然后重启mysql,重新建表,就可以了。

另外,我本来设置编码方式为utf8的,但是发现设置成utf8后中文就插入不了了。不知道怎么解决


补充:

上面留的问题(就是设置成utf8数据库表不能插入中文):

输入命令:show create table emp\G


可以看到windows下mysql的cmd窗口输入的默认编码方式是gbk,你输入gbk方式,服务器端用utf8,不兼容,所以插不进去了。


0 0