`
甘艳丽
  • 浏览: 50976 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

数据库以及JSP页面乱码问题的处理

 
阅读更多

    数据库中和JSP页面中中文显示乱码问题,纠结了我很久。令我兴奋的是,现在已经解决了。刚开始测试时,因为我是在MySQL那个黑框框里面中插入中文数据的,所以没有出现乱码。然而,当我用JSP页面去测试时,情况就不同了。我编写的JSP页面的功能很简单,当输入的用户名和密码都正确时,则将数据库中所以用户的信息用表格显示出来,反之,则提示出错信息。刚开始,我没测试向数据库中插入数据,而是用户名和密码登录,当我输入中文时,到数据库中查找时,查找成功了,但是显示到JSP页面上的信息却是乱码。当时,我觉得很奇怪,数据库中有该用户名,而且查找也成功了,为什么显示的却是乱码。然后,我就在向数据库中查询用户名和密码的方法中,打印了提交的用户名和密码,控制台输出的却是乱码。于是,我就想:提交的是乱码为什么能与数据库中显示的不是乱码的中文能够匹配,觉得可能是数据库中的字符编码有问题?后面,我在Servlet类里添加了一条语句:

 request.setCharacterEncoding("gbk"); 

  页面显示时,却提示出错信息:“帐号或密码错误”,而控制台打印的信息不是乱码。这样,我就更加肯定是数据库中的字符集有问题了。于是,我将MySQL安装目录下的文件my.ini中的

default-character-set=latin1 

 改为了

default-character-set=gbk 

 

 测试之后,还是乱码。然后,我就想测试下:JSP提交的信息插入到数据库中,是否会出现乱码。(都是针对输入中文而言)。果不其然,插到数据库中的信息全是乱码,而且之前在MySQL平台下输入的中文字符也变成了乱码,害得我又将其改回去了。改回去之后,之前在MySQL中输入的中文字符正常,而通过JSP页面提交的中文数据却是乱码,哎,就改这个my.ini文件,都折腾了我很久。后面,都有重新安装mySQL的冲动,但是,我又想,重装mySQL如果没有修改什么,那也没什么区别,况且,像数据库乱码现象,别人肯定遇到过,那就肯定有解决的办法。我就静下心来,到网上查了相关的资料。

     于是,我用

mysql> status;

 指令,查看数据库中的字符编码:显示的是:

Server characterset: latin1
Db characterset: latin1
Client characterset: latin1 
Conn. characterset: latin1 

 

 这样,答案就很明显了,JSP页面编码和解码都是采用gbk,而数据库连接,以及服务器,客户端,数据库本身都是采用latin1编码的,那JSP提交数据到数据库中肯定会出现乱码。那肯定要将数据库中的编码都要设为gbk

 

 

 

 

 

mysql>SET character_set_Client =gbk; 
mysql>SET character_set_Server =gbk; 
mysql>SET character_set_Connection =gbk;
mysql>SET character_set_Database=gbk;

 

 我又执行了 

mysql> status;

  这时显示的是:

Server characterset: gbk 
Db characterset: gbk 
Client characterset: gbk
Conn. characterset: gbk 

 然后,我又执行了

mysql> show variables like 'collation_%';

 

 显示的是:

+----------------------+----------------+
| Variable_name        | Value          |
+----------------------+----------------+
| collation_connection | gbk_chinese_ci |
| collation_database   | gbk_chinese_ci |
| collation_server     | gbk_chinese_ci |
+----------------------+----------------+

 

 当时,以为这样设置就好了,执行了下程序:可是又出现了新的错误:

java.sql.SQLException: Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

 

意思是:我数据库中存在两种字符编码,我觉得纳闷了:将编码设为了:gbk,为什么还会有latin1呢?而且我还将我要操作的那个表的编码也设为了gbk编码:

ALTER   TABLE userinfo   CONVERT   TO   CHARACTER   SET   gbk; 

 那为什么会出现Latin1编码呢?然后,我查了下表中各字段的编码:

show full columns from userinfo;

 显示的是:

+-------+-------------+-------------------+------+-----+---------+--------------
--+---------------------------------+---------+
| Field | Type        | Collation         | Null | Key | Default | Extra
  | Privileges                      | Comment |
+-------+-------------+-------------------+------+-----+---------+--------------
--+---------------------------------+---------+
| id    | int(11)     | NULL              | NO   | PRI | NULL    | auto_incremen
t | select,insert,update,references |         |
| name  | varchar(20) | latin1_swedish_ci | YES  |     | NULL    |
  | select,insert,update,references |         |
| pwd   | varchar(20) | latin1_swedish_ci | YES  |     | NULL    |
  | select,insert,update,references |         |
+-------+-------------+-------------------+------+-----+---------+--------------
--+---------------------------------+---------+

 

从中可以看出我表中字段的编码却是latin1,所以,只要修改表中字段的编码就可以了,但是,我查了网上的资料,按着上面输入:

ALTER   TABLE   `userinfo`     CHANGE   `name`   `name`   VARCHAR(   20   )   CHARACTER   SET   gbk   NOT   NULL

 但是,却老是报

ERROR 1366 (HY000): Incorrect string value: '\xD0\xA1\xD2\xE4' for column 'name'
 at row 1

 这种错误,我也不清楚为什么?后面重新建了一个表:在建表时,就设定了表中字段的编码:

create table userInfo2(
id int not null auto_increment,
name varchar(20) ,
pwd varchar(20),
primary key(id)
)type=myisam character set gbk collate gbk_chinese_ci;

 然后向该表中插入数据都没有出现乱码现象,不管是在mySQL平台上,还是通过JSP页面提交的数据,而且,另一个JSP页面显示数据库中的信息也不是乱码。 

  

分享到:
评论

相关推荐

    JSP中文乱码处理JSP中文乱码处理

    jsp中文乱码的处理 页面显示 表单提交 数据库操作JSP中文乱码处理

    JSP中文乱码问题解决办法

    JSP中文问题解决办法,JSP页面传值,数据库等的中文乱码解决办法

    有关JSP页面乱码问题的解决

    jsp中常见的乱码 1、JSP页面乱码 2、数据库乱码 3、中文作为参数传递乱码 4、JSP页面乱码加这句

    解决JSP到MySQL数据库中文乱码问题

     这里需要设置一下JSP页面的统一编码格式:  打开Eclipse-window->preferences. 根据图片操作.  设置完后, 再新建 JSP页面的时候, 会出现下面的编码.  <%@ page language="java" contentType=...

    jsp页面乱码处理

    在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是在软件开发中遇到的乱码问题以及解决方法。

    Jsp乱码问题解决

    大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大家...一、JSP页面显示乱码 二、表单提交中文时出现乱码 三、数据库连接时出现乱码

    jsp,数据库乱发问题

    描述了现阶段会遇到的乱码问题的处理方案,包括:jsp页面出现乱码,向数据库插入数据时出现乱码,以及中文作为参数时出现乱码

    java页面乱码问题

    解决jsp连接数据库页面乱码问题!(希望能解决你の问题)

    JSP读取ORACLE数据乱码问题

    在从oracle数据库中读取数据时...jsp,页面编码:gb2312 oracle编码:us7ascii 使用过滤器进行编码转换,request.setCharacterEncoding(gb2312),能够使传参时编码转换成中文,但是从数据库中读来的中文却显示为乱码。

    JSP MySQL插入数据时出现中文乱码问题的解决方法

    主要介绍了JSP MySQL插入数据时出现中文乱码问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    JSP乱码解决大全

    JSP乱码解决大全 JSP页面显示乱码 表单提交中文时出现乱码 数据库连接

    jsp+mysql中的中文乱码问题

    非常全的中文乱码问题,从jsp页面到mysql数据库,还有tomcat服务器出现的系列乱码问题,都有提到。本人总结的文档。推荐给初学者。

    jsp中文乱码 jsp mysql 乱码的解决方法

    当使用JSP页面将中文数据添加到MySql数据库中的时候发现变为乱码,或者从mysql中读取中文的时候出现乱码,这些问题根源都是由于字符编码不一致造成的。要知道病源是什么我们才能对症下药,所以我将问题产生的过程...

    JSP利用过滤器解决request中文乱码问题

    主要介绍了JSP利用过滤器解决request中文乱码问题,感兴趣的小伙伴们可以参考一下

    JAVA开发中各种中文乱码问题

    改文档详细总结了JAVA开发中的各种常见的中文乱码,比如JSP页面的中文乱码,数据库的中文乱码等。

    java中的乱码问题

    java中设计的乱码问题解决方案,包括数据库端,页面端,servlet端的乱码解决方法。

    JSP网站开发典型模块与实例精讲

     1.5.3 为JSP指定一个错误处理页面  1.6 独家见解——B/S结构与C/S结构的区别  1.7 指点迷津  1.7.1 怎样学好JSP  1.7.2 新手易出现的问题  1.8 不能不说——养成良好的编程习惯  1.9 小结 第2章 ...

    JSP聊天+BBS论坛

    这个BBS和聊天室完全采用JSP开发,开发运行环境linux+tomcat,数据库oracle9i,JSP 通过JDBC与数据库相连。 一、功能 BBS和chatroom两者有机的结合在一起,用户可以在这两部分取得经验值,达到10000分 后升级为巫师,...

    jsp编码转换类(乱码解决方案)

    jsp页面向数据库中写入数据,当数据为英文时,可正常写入,当数据为中文时,就会出现乱码。

    jsp面试题及答案

    这个文档记录了有关jsp的一些知识,比如: jsp乱码如何解决,几种解决方案。? 一、JSP页面显示乱码二、表单提交中文时出现乱码三、数据库连接时出现乱码

Global site tag (gtag.js) - Google Analytics