- 論壇徽章:
- 0
|
今天操作服務(wù)器數(shù)據(jù)庫時(shí)遇到了Mysql中文字符亂碼的問題,主要原因是因?yàn)榘惭b的時(shí)候沒有設(shè)置好字符集。
于是很是郁悶,因?yàn)閹炖镉泻芏嘀匾獢?shù)據(jù),所以重裝是不可能了,于是決定找找在不重裝且不改代碼的前提下,能搞好的解決方案。
于是看了很多這方面的文章,最終得以解決:以下是解決方案。 mysql亂碼處理總結(jié):
(1)java中處理中文字符正常,在cmd client中顯示亂碼是字符集的問題.
(2)字段長度設(shè)置夠長,但插入中文字符時(shí)提示com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column錯誤是字符集的問題.
(3)亂碼問題歸根到底是字符集的問題,那就從字符集設(shè)置方面考慮,不外乎下面幾個方面:server,client,database,connection,results. -------------------------解決辦法----------------------
(1) 修改 my.ini(MySQL Server Instance Configuration 文件)
# CLIENT SECTION [client] port=3306 [mysql] default-character-set=gbk
# SERVER SECTION [mysqld] default-character-set=gbk
(2) 修改data目錄中相應(yīng)數(shù)據(jù)庫目錄下的db.opt配置文件
default-character-set=gbk default-collation=gbk_chinese_ci
(3)數(shù)據(jù)庫連接串中指定字符集
URL=jdbc:mysql://yourIP/college?user=root&password=yourPassword&useUnicode=true&characterEncoding=gbk
注:在mysql4.1.0版 要加useUnicode=true&characterEncoding=gbk 如果是5.0版以上的,加不加都是沒有關(guān)系的!
(4)在創(chuàng)建數(shù)據(jù)庫時(shí)指定字符集 create database yourDB CHARACTER SET gbk;
(5)在dos命令上要設(shè)置 set names gbk 好了,經(jīng)過檢查上面四個方面的設(shè)置,應(yīng)該 OK 了!不會出現(xiàn)諸如 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column等問題.
Mysql中文亂碼解決 原來常常在群里看到mysql的亂碼問題,但是由于本人一直在用oracle和sql server所以沒多在乎,昨天用了用mysql結(jié)果就遇到了傳說中的亂碼…..。
現(xiàn)在我們來講講mysql的亂碼問題。首先你進(jìn)入的你mysql 用show variables查看 這里可以查看到你的字符
集,character_set_server是服務(wù)器編碼。現(xiàn)在我們默認(rèn)的是latin1要改變服務(wù)器的編碼必須重新啟動服務(wù)器,我們先用
mysqladmin -uroot shutdown關(guān)閉服務(wù)器,然后mysqld -C GBK啟動服務(wù)器
-C是character_set_server的一個簡寫
(可以也可以寫成mysqld -character_set_server gbk).這樣修改以后我們再進(jìn)入mysql查看就會顯示: 這樣我們就把服務(wù)器和數(shù)據(jù)庫的編碼改為了
GBK。 現(xiàn)在我們就可以插入中文字符串了,但是為什么有時(shí)間還是會顯示 Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'name' at row 1 這
是因?yàn)槟阒皇切薷牧薽ysql的服務(wù)器的字符編碼,并沒有修改已經(jīng)有數(shù)據(jù)庫的編碼,這時(shí)候你需要手動的把data目錄下的數(shù)據(jù)庫中的
db.opt中的編碼改為 default-character-set=gbk default-collation=gbk_chinese_ci 這樣修改以后你在重啟服務(wù)器就可以插入中文
了。 但是這時(shí)候還有個問題就是在你應(yīng)用程序當(dāng)中顯示的是中文字符,但是在命令窗口還是亂碼。 這時(shí)候你注意我們上面圖中的
character_set_client字符還是latin1當(dāng)然顯示的是亂碼咯喲。所以你進(jìn)入mysql客戶端程序的時(shí)候因該把客戶端默認(rèn)的編碼改為gbk才能
顯示正常。 你可以在mysql里修改,也可以在登陸的時(shí)候
mysql -uroot -default-character-set=gbk修改 如此以來就解決了中文問題
了。 我剛開始的時(shí)候在程序中加入了一個characterEncoding變量(下圖),但是想來想去都覺得這個變量沒什么用,所以后來去掉也能
顯示正常。 jdbc:mysql://127.0.0.1:3306/ee?characterEncoding=gbk" 總結(jié)下mysql的亂碼問題最好還是設(shè)置數(shù)據(jù)庫的時(shí)候就把
服務(wù)器編碼和數(shù)據(jù)庫編碼都設(shè)置長gbk,還有就是注意查看系統(tǒng)變量。
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u3/104127/showart_2097500.html |
|