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