您的位置:首页 > 数据库 > MySQL

终于解决了MySql5.0.22的中文乱码问题

2010-09-27 01:41 274 查看
被乱码折磨两天余,终于解决了MySql5.0.22的中文乱码问题
我也要发原创啦。 嘎嘎嘎嘎
症状:在mysql的命令行窗口和在浏览器窗口运行web项目时中文都显示为问号,郁闷。查阅N多资料
运行环境是myeclipse8.0(默认为gbk编码)+mysql 5.0.22(默认编码为latin1)+jsp+增删改查web项目+jdbc+ mysql-connector-java-3.1.11-bin.jar+winxp
页面和jsp都声明使用utf-8
大致的思路:把web项目涉及的几个方面的编码都统一起来,
最终结果:在mysql的命令行窗口中可以正常显示中文,浏览器运行web项目时也可以正常显示中文 ,哦耶,大功告成
把基本代码列出来(注意粗体蓝色部分):
1. 在mysql中建表:
create table test_table
(id int(10) unsigned auto_increment primary key,
name varchar(50) not null ,
amount int(10) not null,
price double(11,2),
info text)ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
2. 部分jsp页面:
<%@page pageEncoding="utf-8" %>这句是制定客户端的浏览器以什么字符查看本页面
<%@page import="java.sql.*"%>
<%@include file="validate.jsp" %>

<!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>
<title></title>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/style.css" />
3. </head>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/beatit?useUnicode=true&characterEncoding=UTF-8"(这个参数所有连接都不能少)
, "root"
,"mysql");

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select id,name,amount,price from test_table ");
System.out.println(rs);
%>
<body>
<div id="wrap">
<div id="top_content">
<%@include file="header.jsp"%>
<div id="content">
<p id="whereami">
</p>
<h1>
欢迎你!
</h1>
<table class="table">
<tr class="table_header">
<td>
编号
</td>
<td>
名称
</td>
<td>
数量
</td>
<td>
单价
</td>
</tr>

<%
int n = 0;
while(rs.next()) {
%>

<tr class="row<%=n++%2+1%>">
<td>
<%=rs.getString(1)%>
</td>
<td>
<%=rs.getString(2)%>
</td>
<td>
<%=rs.getString(3)%>
</td>
<td>
<%=rs.getString(4)%>
</td>
</tr>
......

4,登陆MySql后,用"select * from test_table"来查看记录,如果发现还是乱码的话,应该在winxp的cmd黑窗口这样登陆MySql:
mysql --default-character-set=utf8 -u root -p
查看mysql数据库的编码格式的命令
show variables like 'character%';
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1|
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1|
| character_set_system | latin1 |
+--------------------------+--------+

5,jsp之间用表单传递参数(提交方式post)时,获取数据的jsp也要将resultset设置为utf8
request.setCharacterEncoding("utf-8");
结果:在mysql的命令行窗口中的显示由问号变成了乱码,但是在浏览器运行web项目时可以正常显示中文
最后改用命令mysql --default-character-set=gb2312 -u root –p(把数据库的编码格式改为gb2312)重新登陆后就可以在zmysql的命令行窗口中显示中文了,
而且在浏览器运行web项目时也可以正常显示中文

总结:
1. 建表、jsp页面、jdbc数据库连接以及jsp页面之间传递参数时的编码格式都要一致就可以啦,而mysql数据库里要是想显示中文就要使用gb2312,我的默认
Latin1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: