现在的位置: 首页 > 综合 > 正文

jsp连接MYSQL出现乱码解决攻略(全)

2013年09月07日 ⁄ 综合 ⁄ 共 11344字 ⁄ 字号 评论关闭

使用MYSQL数据库,用JSP去连接结果发现出了很多问题,主要集中在乱码显示上面,实际

开发中,想必这类问题是见怪不怪了。搜索了互联网上面很多的帖子,反复推敲,有几点心得写下来,以

后碰到类似的问题,也防止自己忘记要重新来过:

http://blog.csdn.net/fly29/archive/2004/07/31/57084.aspx
刚开始学JSP,就碰到中文乱码问题,在CSDN上看了不少帖子,有点小的启示,还好问题解决了。

今天是碰到关于页面传值,进行显示中文出现乱码的问题。

------------------------------

name:

Email:

 

 

<%@page language="java"%>
<%@page contentType="text/html;charset=gb2312"%>

---------------------------------

服务器之间的信息传输用的是ISO8859_1
而浏览器显示用的是gb2312
用getParameter()的时候,是获得服务器之间传输的信息
所以要指定编码,这就是getBytes("ISO8859_1")
然后用于显示,所以要转换成gb2312
所以String s = new String(getParameter("xxxx").getBytes("ISO8859_1"),"gb2312");
----------------------------------

学到了不少东东,在网上看到还有很多关于中文显示乱码问题,涉及到数据库操作,嗨,只因自己

太菜,还没接触。不过也要先贴过来,以后能用的到的吧。

------------------------------------
利用JDBC连接MYSQL数据库时,连接字符串改成:
String url="jdbc:mysql://server/tzw?useUnicode=true&characterEncoding=GB2312";

这种方法,
-------------------------------------

中文乱码显示原因可能还涉及到OS,JDBC VERSION,DBMS...

学习中...

上面这篇文章是我搜索了很多文章中选出来的,他说得很明白了,乱码问题主要原理就像上面所说的,页

面传值问题。

下面的总结得也很好:
JSP中文乱码问题解决方法小结
http://blog.csdn.net/chm_y/archive/2004/07/03/33277.aspx
在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱码问题

以及解决方法。

1、JSP页面乱码
  这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面

代码指定字符集编码即可:

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %>

2、数据库乱码
  这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
  在数据库连接字符串中加入编码字符集
  String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
  并在页面中使用如下代码:
  response.setContentType("text/html;charset=gb2312");
  request.setCharacterEncoding("gb2312");

3、中文作为参数传递乱码
  当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:
  在参数传递时对参数编码,比如
  RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
  然后在接收参数页面使用如下语句接收
  keywords=new String(request.getParameter("keywords").getBytes("8859_1"));

  以上为现阶段遇到的乱码问题,乱码的核心问题还是字符集编码问题,只要掌握了这一点,一般的乱

码问题都可以解决。

 

综合:
JSP连接MYSQL出现乱码,有两个原因,一个是JSP页面设置的原因,还有一个是MYSQL数据库字符设置的原

因,我们先解决后者。
首先进入MYSQL,运行命令:show create table  test(test 是你具体的数据库里面的一个表的名字),然

后会出现类似下面的信息:
CREATE TABLE `t_course` (
  `id` int(11) NOT NULL,
  `course_code` varchar(10) NOT NULL,
 

`course_name` varchar(50) default NULL,
  `college` varchar(10) default NULL,
 

`course_time` varchar(10) default NULL,
  `start_end` varchar(10) default NULL,
 

`course_tech` varchar(10) default NULL,
  `course_credit` varchar(10) default NULL,
 

`course_site` varchar(30) default NULL,
  `course_note` text
) ENGINE=InnoDB DEFAULT

CHARSET=gb2312

这段信息重要的部分在于后面的:“DEFAULT CHARSET=gb2312”,如果不是这个信息,而是“DEFAULT

CHARSET=latin1”,则直接在数据库执行插入包含中文的数据(insert into test values('中国'))将会

出现乱码,通过JSP执行插入中文数据到MYSQL也是一样乱码,所以我改成我上面所示的CHARSET才行

(DEFAULT CHARSET=gb2312)。
方法有几种:
1、建表前先用语句:set names gbk;
如:
set names gbk;

DROP TABLE IF EXISTS grade;
CREATE TABLE grade (
  Name varchar(30) NOT NULL default '',
  note char(3) NOT NULL default '',
  ID tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (ID)
) TYPE=MyISAM;

 

--
-- Dumping data for table 'grade'
--

INSERT INTO grade VALUES ('初一','c1',2);
INSERT INTO grade VALUES ('初二','c2',3);
INSERT INTO grade VALUES ('初三','c3',4);
INSERT INTO grade VALUES ('初中','c',1);
INSERT INTO grade VALUES ('高一','g1',6);
INSERT INTO grade VALUES ('高二','g2',7);
INSERT INTO grade VALUES ('高中','g',5);
INSERT INTO grade VALUES ('高三理科','g3l',9);
INSERT INTO grade VALUES ('高三文科','g3w',10);

这样数据就能插入正常。

2、对于插入数据提示:Data too long for column 'name' at row 1的问题
一个是配置文件 my.ini
一个是改SQL语句 加gbk
如果上面的方法都不行,那就更换MYSQL的驱动,换最新版本的驱动就好使

3、如果碰到输入一些生僻字数据库提示:Data too long for column 'name' at row 1错误
可以在输入数据之前加上:set names gbk

4、为什么我向MySQL数据库(5.0版本)插入记录的时候,当某个字段的内容是中文的时候就提示错误呢?

解决方法如下:

create table rz_user(
id integer not null auto_increment,
name varchar(32),
password varchar(32),
primary key(id)
);

--插入语句:

set names gbk;

insert into rz_user values(1,'朋友','1123334');

解决方法是上面的:插入数据前加入:set names gbk;

5、
jsp中使用mysql中文乱码的问题。
前天试着在jsp中使用mysql作为数据库,但是一上手就遇到了乱码的问题。我把页面中凡是有charset之

类的地方全部改成gb2312了,页面不显示出乱码了。后来又查了资料很简单的解决了,建立数据库的时候

用 create database zzz default character setgb2312;就可以很好的把问题解决了。

6、解决jsp从mysql读数据中文乱码的问题
把所有的地方都设置成UTF-8的编码了,照道理应该没问题了,但是中文写入数据库是没问题,数据库里

显示的也是中文,而读出时确是乱码。原来在mysql5.0中我使用了text类型就会出现读取时中文乱码。解

决办法就是new String(rs.getString(i).getBytes("ISO-8859-1"),"UTF-8")。把原来rs.getString(i)

进行编码转换即可。

7、character_set_database用show variables看始终是latin1,用set character_set_database=utf8也

改不过来!

my.ini里面或许会有,或者就是编译时候指定的。
在my.cnf或my.ini中添加
default-character-set=utf8
保存后重启mysql,如果不能启动只能重装了,安装的时候再指定字符集就可以了。

8、MYSQL安装时默认缺省的字符集:
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |

 

9、mysql中文显示问题
http://cache.baidu.com/c?word=%D0%DE%B8%C4%2Ccharacter%3B%5F%3Bset%3B%5F%

3Bdatabase&url=http%3A//www%2Ezhanso%2Ecom/JAVA/JAVA%5F1%5F17308%

2Ehtml&p=c062c64ad58757fe08e2912150&user=baidu
问:
从javabean中将中文存到数据库中,在数据库中显示为"?" 但我在jsp页面存中文到数据库中就能正常显

示 show variables like %char%;显示为 character_set_client :gbk character_set_connection :gbk

character_set_database :latin1 character_set_results :gbk character_set_server :utf8 请问各

位高手如何解决 谢拉
我用这个方法转换编码还是不成 public String toChinese(String str) { if (str == null ||

str.length() < 1) { str = ""; } else { try { str = (new String(str.getBytes("ISO-8859-1"),

"GB2312")); } catch (UnsupportedEncodingException e) { System.err.print(e.getMessage());

e.printStackTrace(); return str; } } return str; }
回复3mysql中文显示问题
我的解决方法是所有jsp页面都是UTF-8,再将从页面得到的值转成UTF8,数据库相应的字段也是UTF-8 可

以看我的blog http://syhan.javaeye.com/blog/59113
回复4mysql中文显示问题
如果用这种方法改那就变动太大了 有没有什么简单点的方法?
回复5mysql中文显示问题
所有编码都统一起来,用一种就可以了就不用再转换了,也不用乱码发愁了 建议都用GBK
回复6mysql中文显示问题
character_set_database :latin1 这个改成UTF-8或GB2312试试
回复7mysql中文显示问题
怎么改character_set_database :latin1?
回复8mysql中文显示问题
Mysql_front可以把character相关的改成gb2312
回复9mysql中文显示问题
if是win下 修改my.ini else 修改 my.cnf 在[mysqld]下

 

10:Linux下MySQL,jsp的中文问题解决
http://syhan.javaeye.com/blog/59113
关键字:   mysql 中文乱码 jsp    
我的环境为Ubuntu 6.10, MySQL 5.0.24a-Debian_9ubuntu1(直接apt-get而来), tomcat 5.5.20

这个也算是一个经典问题了,写在这里以后方便查阅

没什么原创,结合前人的经验,我的步骤如下

 

1、修改/etc/mysql/my.cnf,在

[mysqld]下添加一行

java 代码
[mysqld]   
default-character-set=utf8  

保存退出后,重新启动mysql的服务

 

java 代码
sudo /etc/init.d/mysql restart  

2、将所有需要输入中文的jsp页面的pageEncoding都设为UTF-8,即在开始加上

java 代码
<%@ page language="java" pageEncoding="UTF-8"%>  

3、从页面接受的中文字符串在加入数据库前都先进行转码,也很简单

java 代码
 
public static String getDecodedString(String str)  
  
{  
  
try {  
  
return new String(str.getBytes("ISO8859-1"), "UTF-8");  
  
} catch (UnsupportedEncodingException e) {  
  
e.printStackTrace();  
  
}  
  
return str;  
  
}  

这是因为Tomcat默认的编码格式是ISO8859-1,当然,也可以通过重新编译Tomcat的源码来将这个默认编

码改为UTF-8,这是另一种办法,我没试过

补充:还有一种一了百了的方法就是用fliter,作用就是将所有页面输入的数据都改变编码格式,需要自

己写一个转换类(和上面的差不多一样),同时在web.xml里配置下就可以了

4、数据库建立的时要将含中文字符的字段的charset设置为UTF-8,例如

sql 代码
 
CREATE TABLE test (  
  
`name` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''  
  

这样就可以使得mysql支持中文了

 

 

题外话:MySQL-Administrator有一个很恶心的bug,就是在进行User Administration的时候会整个界面

死掉,控制台下报

cpp 代码
 
** (mysql-admin:20978): CRITICAL **: void MGFileBrowserList::get_row_object(const

Gtk::TreeIter&, std::string&): assertion `iter' failed  

 

网上显示已经fixed release,但是很可惜的是至少在我的ubuntu上的仍然存在

 

11、JSP中文乱码问题解决方法小结
http://hi.baidu.com/liuzy84/blog/item/1a6eebfa9e4f3fdeb48f31f3.html
在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱码问题

以及解决方法。 
  1、JSP页面乱码

  这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面

代码指定字符集编码即可,

  2、数据库乱码

  这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
  在数据库连接字符串中加入编码字符集
  String Url="jdbc:mysql://localhost/digitgulf?

user=root&password=root&useUnicode=true&characterEncoding=GB2312";
  并在页面中使用如下代码:
  response.setContentType("text/html;charset=gb2312");
  request.setCharacterEncoding("gb2312");

  3、中文作为参数传递乱码

  当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:
  在参数传递时对参数编码,比如
  RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
  然后在接收参数页面使用如下语句接收
  keywords=new String(request.getParameter("keywords").getBytes("8859_1"));

  4、JSP页面乱码加这句?

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"

errorPage="err.jsp" %>

 

12、在做jsp作业的时候,jsp连接MySQL出现乱码的解决
http://blog.csdn.net/VooStone/archive/2006/06/16/803928.aspx
问了同学,他说只要下一个MySQL-Font就可以解决问题,在当时确实解决了乱码的问题。

但第二次的启动MySQL的时候又出现了乱码的问题。google完后,
发现只要把my.ini里的character-set都改成gb2312,包括服务器端与客户端。

问题就解决了。。  

 

13、java中文乱码的解决
http://blog.csdn.net/bineon/archive/2004/08/09/69652.aspx
1、在网页中输出中文。
JAVA在网络传输中使用的编码是"ISO-8859-1",故在输出时需要进行转化,如:
String  str="中文";
str=new  String(str.getBytes("GB2312"),"8859_1");
但如果在编译程序时,使用的编码是“GB2312”,且在中文平台上运行此程序,不会出现此问题,一定要

注意。
2、从参数中读取中文
这正好与在网页中输出相反如:
str=new  String(str.getBytes("8859_1"),"GB2312");
3、操作DB中的中文问题
一个较简单的方法是:在“控制面扳”中,把“区域”设置为“英语(美国)”。如果还会出现乱码,还可

进行如下设置:
取中文时:str=new  String(str.getBytes("GB2312"));
向DB中输入中文:str=new  String(str.getBytes("ISO-8859-1"));

4、在JSP中的中文解决:

在“控制面扳”中,把“区域”设置为“英语(美国)”.
在JSP页面中加入:
如果还不行正常显示,则还要进行下面的转换:
如:name=new  String(name.getBytes("ISO-8859-1"),"GBK");
就不会出现中文问题了。

 

14、中文显示乱码!(不断添加...)
http://blog.csdn.net/fly29/archive/2004/07/31/57084.aspx

刚开始学JSP,就碰到中文乱码问题,在CSDN上看了不少帖子,有点小的启示,还好问题解决了。

今天是碰到关于页面传值,进行显示中文出现乱码的问题。

------------------------------

name:

Email:

 

 

<%@page language="java"%>
<%@page contentType="text/html;charset=gb2312"%>

---------------------------------

服务器之间的信息传输用的是ISO8859_1
而浏览器显示用的是gb2312
用getParameter()的时候,是获得服务器之间传输的信息
所以要指定编码,这就是getBytes("ISO8859_1")
然后用于显示,所以要转换成gb2312
所以String s = new String(getParameter("xxxx").getBytes("ISO8859_1"),"gb2312");
----------------------------------

学到了不少东东,在网上看到还有很多关于中文显示乱码问题,涉及到数据库操作,嗨,只因自己

太菜,还没接触。不过也要先贴过来,以后能用的到的吧。

------------------------------------
利用JDBC连接MYSQL数据库时,连接字符串改成:
String url="jdbc:mysql://server/tzw?useUnicode=true&characterEncoding=GB2312";

这种方法,
-------------------------------------

中文乱码显示原因可能还涉及到OS,JDBC VERSION,DBMS...

学习中...

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=57084

15、在Jsp中操作MySql中文问题???
http://topic.csdn.net/t/20030505/17/1742215.html
为什么在Jsp中向MySql数据库中添加中文数据,MySql中显示的中文数据是乱码,在Jsp程序中读出的时候,

也是乱码,通过内码转换同样如此?该怎样解决?  
 
问题点数:0、回复次数:7
Top
 

1 楼dcmj(二阶)回复于 2003-05-05 17:54:38 得分 0 试一下:  
   
  1.    
  一般的,接收传过来的中文串    
  String   str   =   new   String(request.getParameter("str").getBytes("8859_1"));    
  2.    
  import="java.net.URLEncoder"    
  import="java.net.URLDecoder"    
  .......    
  传时    
  URLEncoder.encode(_str);    
  接时    
  String   str   =   URLDecoder.decode(_str);    
   
  在tomcat下需如下接收    
  String   str   =   URLDecoder.decode(new   String(request.getParameter("_str").getBytes

("8859_1")));
Top

2 楼ienet(SYS)回复于 2003-05-12 20:58:02 得分 0 第一种方法我试了一下,不行。  
  第二种还没试。
Top

3 楼baosn()回复于 2003-05-12 21:23:06 得分 0 在jsp网页中显示中文只要在jsp网页中加入如下语

句:  
  <%@   page   contentType="text/html;charset="gb2312"   %>  
  向数据库中插入中文前使用如下函数转换一下:  
  public   static   String   toChinese(String   strvalue){  
                try{  
                        if(strvalue==null)  
                                  return   null;  
                        else{  
                                  strvalue=new   String(strvalue.getBytes

("ISO8859_1"),"GBK");  
                                  return   strvalue;  
                                }  
                }catch(Exception   e){  
                                  return   null;  
                }  
          }
Top

4 楼snicker(我得意的笑)回复于 2003-05-13 08:52:17 得分 0 jsp网页中加上:  
  <%@   page   contentType="text/html;charset="gb2312"   %>  
   
  数据库连接url后面加上  
  "?useUnicode=true&characterEncoding=gb2312"  
   
 
Top

5 楼zheng_wei99(少走弯路)回复于 2003-05-13 09:08:15 得分 0 我也遇到这样的问题。sigh,痛苦


Top

6 楼zhangsq(中zhangsq)回复于 2003-05-13 09:22:56 得分 0 连接数据库时:  
  tring   ConnStr="jdbc:mysql://localhost:3306/flystar?

useUnicode=true&characterEncoding=gb2312";  
      即可!我用的就是mysql
Top

7 楼jeoky(jeoky)回复于 2003-05-13 19:20:01 得分 0 1、在插入数据操作的页面不要引用<%@  

page   contentType="text/html;charset="gb2312"   %>,那么MySql中显示的中文数据是正确的;  
  2、在页面显示数据时才用<%@   page   contentType="text/html;charset="gb2312"   %>;  
  3、对有中文的字段查询时,要将关键字作编码转换  
        例如:name="程序";  
                    name=new   String(name.getBytes("ISO8859_1"),"gb2312");  
                    这样才能正确查询;  
 
 这些总结有帮助理解和解决MYSQL中文乱码的问题

抱歉!评论已关闭.