<%@ page contentType="text/html; charset=gb2312"%> mysql中文乱码终结
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
mysql中文乱码终结
     发布者:yexin218 发布时间:2007-01-13

我自己都不知道为了中文问题烦恼了多少个日子,最恨瑞典人了-谁叫他发明了mysql,还设置了默认设置:latin1.曾经也在想假如中国人发明了 mysql(my see狗),呵呵,那么我们还有这样烦恼吗?默认的就是gk2312 或者gbk.倘若考虑到台湾朋友加一个big5.就得了。可是呢?事实不是这样的,没有办法,自己只好baidu一下,google一下,甚至yahoo 一下。能找到的方法都试过了,好久了,直到今天让我找到了,想明白了。所以急切和大家分享以下心得。

为了说的明白一些,我觉个例子:
很简单,就是从html中接受两个输入,然后由jsp处理写到mysql且从数据库返回这个结果显示出来。
Mysql_jstl.html

<html>
<head>
  <title>CH14 - Mysql_jstl.html</title>
<meta http-equiv="Content-Type" content="text/html; charset= GB2312">
</head>
<body>
 
<h2>将信息存入 Mysql 中 - 使用 JSTL 写法</h2>
<form name="form" action="Mysql_jstl.jsp" method="post" >
  <p>姓:<input name="last_name" type="text" id="last_name"></p>
  <p>名:<input name="first_name" type="text" id="first_name"></p>
  <p>
    <input type="submit" value="传送">
    <input type="reset" value="取消">
  </p>
</form>

</body>
</html>




Mysql_jstl.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>
  <title>CH14 - Mysql_jstl.jsp</title>
</head>
<body>

<h2>将信息存入 Mysql 中 - 使用 JSTL 写法</h2>

<fmt:requestEncoding value="GB2312" />

<c:set var="birth" value="1978/12/11" />
<c:set var="sex" value="F" />
<c:set var="email" value="aaa@asdf.com" />

<sql:setDataSource driver="com.mysql.jdbc.Driver"
         url="jdbc:mysql://localhost:3306/sample?useUnicode=true&characterEncoding=UTF-8"
         user="root"
         password="44444" />

<sql:update>
  INSERT INTO employee(employee_id, last_name, first_name, birth, sex, emmail)
  VALUES ( ? , ? , ? , ? , ? , ? )
  
  <sql:param value="${employee_id}" />
  <sql:param value="${param.last_name}" />
  <sql:param value="${param.first_name}" />
  <sql:param value="${birth}" />
  <sql:param value="${sex}" />
  <sql:param value="${email}" />
</sql:update>

<sql:query var="result">
  SELECT * FROM employee
</sql:query>

从 employee 取出所有新增的姓名:<br>
<c:forEach items="${result.rows}" var="row" >
新增姓名:<c:out value="${row.last_name}" />
     <c:out value="${row.first_name}" /><br>
</c:forEach>

</body>
</html>


接下来就是创建数据库,名字为sample

然后建立一个table: employee,
内容如下(其中应该是email,可是我不小心在建数据库打错了,将错就错了):

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| employee_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| last_name   | varchar(20)      | YES  |     | NULL    |                |
| first_name  | varchar(20)      | YES  |     | NULL    |                |
| birth       | date             | YES  |     | NULL    |                |
| sex         | enum('m','f')    | YES  |     | m       |                |
| emmail      | varchar(39)      | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

如果只是这样的话,就会出现这样的错误:报告的错误是:sqle=com.mysql.jdbc.MysqlDataTruncation:
Data truncation: Data too long
for column 'last_name' at row 1
 从 employee!
有的情况是:
| name        |
+-------------+
| ??          |
| 54243654321 |
| ??          |
| ??          |
+-------------+出现问号!

前面我们已经说过了,mysql默认的编码是latin1,不是我们所需要的gbk,所以我们要修改成为utf8,因为若要正确显示中文繁、简、日文、韩文 使用utf8,修改方法如下:
  ALTER DATABASE sample ####这里修改整个数据库的编码
       CHARACTER SET utf8
       DEFAULT CHARACTER SET utf8
       COLLATE utf8_general_ci
       DEFAULT COLLATE utf8_general_ci;

当然了,你也可在在建数据库的时候指定编码,比如:

CREATE DATABASE sample

       CHARACTER SET utf8
       DEFAULT CHARACTER SET utf8

       COLLATE utf8_general_ci
       DEFAULT COLLATE utf8_general_ci ;

接下来要做的是打开mysql所在的目录下的my.nin

在[mysqld]段加入一下代码改成:


default-character-set=utf8

启动mysql,输入:


执行下列语句,看看结果是不是下面的:

mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8
| character_set_system | utf8 |
| character_sets_dir | C:\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+-------------------------------------------+

mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-------------------+



接着你再看看执行那个Mysql.html 文件:这回你可以看到的是
mysql> select * from employee;
+-------------+-----------+------------+------------+------+--------------+
| employee_id | last_name | first_name | birth      | sex  | emmail       |
+-------------+-----------+------------+------------+------+--------------+
|          12 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          13 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          14 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          15 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          16 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          17 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+

这当然不是我们希望看到的,我们需要的现实完美正确的中文:
我们还有最后一招:
mysql> SET NAMES 'gbk' ;
Query OK, 0 rows affected (0.00 sec)
因为我们需要的是gbk.
看看mysql中的character设置情况:

mysql> SHOW VARIABLES LIKE '%character%' ;
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | utf8                                      |
| character_set_results    | gbk                                       |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

这个才是我们最终需要的。
在来查看执行完Mysql_jstl.jsp后的数据库中的结果:
mysql> select * from employee;
|          14 | 王        | 彭给       | 1978-12-11 | f    | aaa@asdf.com |
|          15 | 田        | 王光       | 1978-12-11 | f    | aaa@asdf.com |
|          16 | 息        | 存入       | 1978-12-11 | f    | aaa@asdf.com |
|          17 | 往        | 小杯       | 1978-12-11 | f    | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+

可以高兴得看到了中文,并且在浏览器中也显示正确。

但是仅仅这样的话,当你重新启动mysql的时候
所有的设置又失效了。
mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | utf8                                      |
| character_set_results    | latin1                                    |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+-------------------------------------------+

mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+
重新读取又出现乱码:
mysql> select * from employee;
+-------------+-----------+------------+------------+--
| employee_id | last_name | first_name | birth      | s
+-------------+-----------+------------+------------+--
|          12 | ?         | ??         | 1978-12-11 | f
|          13 | ?         | ??         | 1978-12-11 | f
|          14 | ?         | ??         | 1978-12-11 | f
|          15 | ?         | ??         | 1978-12-11 | f
|          16 | ?         | ??         | 1978-12-11 | f
|          17 | ?         | ??         | 1978-12-11 | f
+-------------+-----------+------------+------------+--
所以我们需要在客户端设置系统能识别中文的编码gbk并没有保存到my.ini文件中。所以要修改my.ini文件

在[mysql]段加入一下代码改成:default-character-set=gbk 这样设置就得到保存了。
重启就可以了。
mysql> show variables like '%character%';
+--------------------------+----------------
| Variable_name | Value
+--------------------------+----------------
| character_set_client | gbk
| character_set_connection | gbk
| character_set_database | utf8
| character_set_results | gbk
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | C:\MySQL\MySQL
+--------------------------+----------------
mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+


也许写的很乱,你可以参考一下这里:
中文乱码问题
或者留言,联系我。

Blog: http://yexin218.cublog.cn/
QQ:331387429

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
javasript的checkbox的一个问题
在Java中做一个线程安全的类
Spring编程入门十大问题解答
Eclipse in action 读书笔记
用ant构建项目 《eclipse in action》第五章
Hibernate 上手篇
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(7487)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(1515)
        
滤油机
提供滤油机设计,画册滤油机作品,中国滤油机设计网,一个寻找滤油机灵感的地方!提供最有价值的滤油机设计滤油机人物,滤油机作品,滤油机设备,滤油机营销,滤油机材料,平面滤油机,滤油机市场.综合性的滤油机行业网站温岭江扬铝箔厂是一家专业性铝箔制造厂家,有着多年铝箔生产史,多年铝箔制造使我们在铝箔行业懂得多,铝箔制造得好。 律师事务所公司-北京金橄榄律师事务所公司是首都信誉卓著的律师事务所公司,本律师事务所公司提供50多个语种的律师事务所服务.长沙论文发表公司专业论文发表机构权威推出长沙论文发表公司, 长沙论文发表公司英语论文发表, 长沙论文发表公司论文发表网公司是股份制企业,论文发表网公司主要经营各种论文发表网,库存积压论文发表网,了解论文发表网产品请访问论文发表网网
        
回复:mysql中文乱码终结
工业链条-2082K2生产商,为您提供工业链条-2082K2及工业链条-2082K2相关产品信息。 工业皮带生产商,为您提供工业皮带及工业皮带相关产品信息。 日本IKO直线导轨,耐酸碱抗腐蚀的交叉滚子滑块,韩国SBC精密导轨,SBC直线导轨,CPC直线导轨。 E系列增压泵气体驱动液压泵E系列增压泵气体驱动液压泵,简单阐述敞开式干式变压器的发展过程,介绍新的H级绝缘敞开式干式变压器的技术特点。timken轴承fag轴承系列组成。
        
wow gold for sale
buy wow gold ,welcome to our site. comeing so...cheapest wow gold
        
回复:mysql中文乱码终结
北京专业硬盘数据恢复公司,提供数据恢复数据修复服务--恢复硬盘数据恢复。本报讯地铁施工的围挡板成了小贩们展示货品的货架,本来就狭窄的人行通道被一个个地摊货架占去了近一半。国际烟花网专业的花炮交易资讯平台;最新的浏阳烟花产品,最全的烟花批发企业资料,最可靠的烟花交易信息.。需要出国留学英国留学法国留学加拿大留学日本留学美国留学澳大利亚留学的欧美亚教育服务中心可以提供各种帮助.中国留学行业第一旗舰品牌-澳际北京总部及上海广州南京温州兰州昆明沈阳悉尼加拿大等全球分支机构。中国从事专利行业的最权威的政府部门
        
回复:mysql中文乱码终结
1:数据恢复 货架 留学 硬盘数据恢复 数据恢复 数据恢复 数据修复 硬盘修复 出国留学 留学中介 硬盘数据恢复 服务器数据恢复 硬盘维修 磁盘阵列数据恢复 RAID数据恢复 北京数据恢复 上海数据恢复 磁盘阵列 重庆数据恢复 成都数据恢复 花炮 浏阳烟花 烟花 烟花批发 花炮厂 唐山电脑维修 专利 翻译公司 浏阳烟花厂 浏阳花炮厂 2:韩国留学 日本留学 美国留学 加拿大留学 法国留学 新加坡留学 澳大利亚留学 英国留学 德国留学 澳洲留学 意大利留学 新西兰留学 荷兰留学 俄罗斯留学 留学韩国 留学日本 留学美国 留学加拿大 留学法国 留学新加坡 留学澳大利亚 留学英国 留学德国 留学澳洲 留学意大利 留学新西兰 留学荷兰 留学俄罗斯 3:超市货架 仓储货架 货架厂 北京货架 上海货架 仓库货架 广州货架 南京货架 重型货架 精品货架 深圳货架 货架公司 服装货架 沈阳货架 中国货架网 货架 货架厂 超市货架 重型货架 北京货架 北京货架厂 精品货架 仓储货架厂 仓储货架 天津重型货架 天津仓储货架 天津货架厂 天津货架 中国结 戴雪儿
        
回复:mysql中文乱码终结
深圳市老牌顺发搬家服务公司,深圳搬家是深圳运输局批准和工商局注册成立的一家具有独立法人资格的专业深圳搬家公司,凭借先进的运输设备和优秀的人员素质,专业提供深圳搬家,深圳搬迁服务。
        
回复:mysql中文乱码终结
深圳市时代物流有限公司是一家经市运输批准许可,工商、税务注册成立的具有独立法人资格的深圳物流公司,深圳物流公司中型深圳物流公司深圳物流公司的企业深圳物流公司。
        
回复:mysql中文乱码终结
p>平板,平台,铸铁平板,检验平板,铸铁平台,划线平板铆焊平板T型槽平板划线平台铆焊平台T型槽平台,装配平台,装配平板,落地镗平台,检验平台,工作台,

花岗石平板,花岗石平台,花岗石平尺,花岗石方尺,花岗石方箱,花岗石直角尺,花岗石V型铁,测微仪

平尺,角尺,平行平尺,桥型平尺,角度平尺,直角尺,镁铝合金平尺

弯板,铸铁弯板,普通弯板

方箱,方筒,铸铁方箱,铸铁方筒,方筒体

垫铁,机床垫铁,机床调整垫铁,防震垫铁,减震垫铁,调整垫铁

齿轮跳动仪,偏摆检查仪,偏摆仪,齿轮跳动检查仪

铸造,铸件,汽车模具,精密铸造,精密铸件

齿轮泵 齿轮泵 热油泵 螺杆泵 点火泵 罗茨泵 沥青保温泵 高粘度泵 不锈钢泵 圆弧泵 渣油泵 煤焦油泵 齿轮泵 齿轮油泵 热油泵 螺杆泵 不锈钢齿轮泵 高粘度泵 渣油泵 自吸式离心泵 沥青保温泵 增压燃油泵 无堵塞排污泵

齿轮泵--热油泵--沥青泵--不锈钢泵--高粘度泵--渣油泵--离心油泵

铸铁平板,铸铁平台

平板,平台,铸铁平板,检验平板,铸铁平台,划线平板铆焊平板T型槽平板划线平台铆焊平台T型槽平台,装配平台,装配平板,落地镗平台,检验平台,工作台,

花岗石平板,花岗石平台,花岗石平尺,花岗石方尺,花岗石方箱,花岗石直角尺,花岗石V型铁,测微仪

平尺,角尺,平行平尺,桥型平尺,角度平尺,直角尺,镁铝合金平尺

弯板,铸铁弯板,普通弯板

方箱,方筒,铸铁方箱,铸铁方筒,方筒体

垫铁,机床垫铁,机床调整垫铁,防震垫铁,减震垫铁,调整垫铁

齿轮跳动仪,偏摆检查仪,偏摆仪,齿轮跳动检查仪

铸造,铸件,汽车模具,精密铸造,精密铸件

        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号