我在虛擬機上安裝了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