终于解决了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
我也要发原创啦。 嘎嘎嘎嘎
症状:在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
相关文章推荐
- MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题
- MySQL客户端输出窗口显示中文乱码问题解决办法
- MyEclipse+MySql插入中文乱码问题解决
- 解决 通过JDBC向MySQL插入数据的中文乱码 问题
- 【问题解决】MYSQL中文显示'?'中文乱码问题
- Mysql 下中文乱码的问题解决方法总结
- Linux下MySQL 5.5的修改字符集编码为UTF8(彻底解决中文乱码问题)
- ajax提交中文数据,乱码问题,困扰我整整两天。终于被我解决。。。
- mysql 读出及写入中文乱码问题与解决
- mac下解决MySQL中文乱码的问题
- 解决中文存入MySql出现乱码问题
- MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法[转贴]
- Linux下MySQL 5.5的修改字符集编码为UTF8(彻底解决中文乱码问题)
- 妥妥解决MySqL中文乱码问题,就这么任性
- 关于mysql中文乱码问题的解决
- Mysql客户端中文乱码问题解决
- mysql如何解决中文乱码问题
- mysql默认编码设置成gbk,解决dos下查询中文乱码的问题!
- 解决MySQL客户端输出窗口显示中文乱码问题的办法