mysql客戶端操作需要顯示或輸入中文時出現亂碼——解決辦法
文章源:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html
http://www.jb51.net/article/75889.htm
在MySQL的dos客戶端輸出視窗中查詢表中的資料時,表中的中文資料都顯示成亂碼,例如:
之所以會顯示亂碼,就是因為MySQL客戶端輸出視窗顯示中文時使用的字元編碼不對造成的
使用語句show variables like 'char%'; 來檢視當前資料庫的相關編碼集。
命令執行完成之後顯示結果如下所示:
從上圖中可以看到 MySQL 有六處使用了字符集
分別為:client
、connection、database、results、server 、system
其中與伺服器端相關:database、server、system(永遠無法修改,就是utf-8)
與客戶端相關:connection、client、results
client | 為客戶端使用的字符集。 |
connection | 為連線資料庫的字符集設定型別,如果程式沒有指明連線資料庫使用的字符集型別則按照伺服器端預設的字符集設定。 |
database | 為資料庫伺服器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用伺服器安裝時指定的字符集設定。 |
results | 為資料庫給客戶端返回時使用的字符集設定,如果沒有指明,使用伺服器預設的字符集。 |
server | 為伺服器安裝時指定的預設字符集設定。 |
system | 為資料庫系統使用的字符集設定。 |
瞭解了上面的資訊我們來分析下亂碼的原因,問題出在了當前的 CMD 客戶端視窗,因為當前的 CMD 客戶端採用 GBK 編碼(因為作業系統是中文作業系統,預設使用的字符集是GB2312,所以需要把輸出視窗使用的字元編碼改成gb2312才能夠正常顯示中文。),而資料庫的編碼格式為 UTF-8,編碼不一致導致了亂碼產生。
而當前 CMD 客戶端的編碼格式無法修改,所以只能修改 connection、 client、results 的編碼集來告知伺服器端當前插入或顯示的資料採用 GBK 編碼,而伺服器的資料庫雖然是採用 UTF-8 編碼,但卻可以識別通知伺服器端的 GBK 編碼資料並將其自動轉換為
UTF-8 進行儲存。
可以使用如下語句來快速設定與客戶端相關的編碼集:
set character_set_results=gb2312; 或者 set names gbk;
設定完成後即可解決客戶端插入資料或顯示資料的亂碼問題了,但我們馬上會發現這種形式的設定只會在當前視窗有效,當視窗關閉後重新開啟 CMD 客戶端的時候又會出現亂碼問題;那麼,如何進行一個一勞永逸的設定呢?在 MySQL 的安裝目錄下有一個 my.ini 配置檔案,通過修改這個配置檔案可以一勞永逸的解決亂碼問題。在這個配置檔案中 [mysql] 與客戶端配置相關,[mysqld] 與伺服器配置相關。預設配置如下:
- [mysql]
- default-character-set=utf8
- [mysqld]
- character-set-server=utf8
這時只需要將下的預設編碼 default-character-set=utf8 改為 default-character-set=gbk ,重新啟動 MySQL 服務即可。
注意:修改配置檔案時,可以將其剪下到桌面,修改檔案字尾為txt格式,等到修改儲存後恢復ini字尾,貼上到原位置即可。