Redhat5下MySql遇到的亂碼問題

我在虛擬機上安裝瞭redhat並安裝瞭mysql數據庫,並在本地通過java訪問,直接使用jdbc訪問。

後來發現當數據庫存儲漢字時存在亂碼問題,隨後在網上找資料進行解決,現在問題已經解決,來總結一下亂碼的幾個問題。

 

更改數據庫默認字符集編碼:

更改mysql配置文件,這個配置文件在/etc/my.cnf,可能安裝mysql後這個文件就有瞭,如果沒有,請回到根目錄然後查詢cnf文件:

Java代碼  

find / -iname '*.cnf' -print  

 拷貝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一個到/etc下,改名為my.cnf:

Java代碼  

cp /usr/share/mysql/my-medium.cnf /etc/my.cnf  

 拷貝路徑根據查詢出來的結果修改。

修改my.cnf

Java代碼  

vi /etc/my.cnf  

 在[client]下添加

Java代碼  

default-character-set=gbk  

 在[mysqld]下添加

Java代碼  

default-character-set=gbk  

 然後重啟mysql。

登錄mysql查詢是否生效:

Java代碼  

mysql> show variables like 'collation_%';  

mysql> show variables like 'character_set_%';  

註意如果你設置的是UTF-8請設置utf8,而不是utf-8,否則你的mysql重啟時不能啟動。

 

 

修改數據庫字符集後再修改數據庫的字符集:

Java代碼  

mysql>use mydb  

mysql>alter database mydb character set gbk;  

 建議是在創建數據庫時就指定字符集

Java代碼  

mysql>create database mydb character set gbk;  

除瞭使用命令來修改數據的字符集,也可以修改其配置文件

修改 /var/lib/mysql/mydb/db.opt

Java代碼  

default-character-set=latin1  

default-collation=latin1_swedish_ci  

 為

Java代碼  

default-character-set=gbk  

default-collation=gbk_general_ci  

 重起MySQL 

 

建表時註意:

除瞭修改mysql和其數據庫的字符集外,要註意建表時你可能用的是導出的SQL語句,這些語句中可能包含瞭建表的字符集,一定要修改或刪除這些語句:

Sql代碼  

CREATE TABLE `NewTable` (  

`id`  int(11) NOT NULL ,  

`name`  varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,  

`age`  int(100) NULL DEFAULT NULL ,  

PRIMARY KEY (`id`)  

)  

ENGINE=MyISAM  

DEFAULT CHARACTER SET=gbk COLLATE=gbk_chinese_ci  

CHECKSUM=0  

ROW_FORMAT=DYNAMIC  

DELAY_KEY_WRITE=0  

;  

 

連接方面:

如果數據庫配置正確,那麼使用管理工具如Navicat for MySQL時就不會有問題瞭,但是在程序中難免還是有問題。 

除瞭對於數據庫方面的註意外,在連接數據庫要註意指定連接的字符集

Java代碼  

jdbc:mysql://192.168.154.128:3306/t2?useUnicode=true&characterEncoding=gbk  

 

程序方面:

可是就算到這裡仍然可能是亂碼,但是沒有那麼嚴重瞭,這就要你在代碼中進行轉換瞭。

Java代碼  

String newStr = new String(s.getBytes("ISO-8859-1"),"GBK");  

 

 也許有人會說,亂碼就是亂碼,還嚴重不嚴重?其實亂碼在我看來分為兩種情況,一種就是存儲或者其他方面亂瞭,而另一種是存儲是對的但是顯示有問題。比如你設置正確後使用管理工具沒有問題但是程序讀取就有問題。

如果你看到的亂碼是根本不知道顯示的是什麼,那就是嚴重的。但如果你看到的是????那在我看來就是缺少轉換,就不屬於大問題。當然這是個人看法,請大傢不要鉆牛角尖。

 

 

 

作者 cuisuqiang

You May Also Like