jsp串連MYSQL出現亂碼解決攻略(全)

來源:互聯網
上載者:User

使用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中文亂碼的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.