1. 程式人生 > >Navicat和MYSQL字符集不統一出現的中文亂碼問題

Navicat和MYSQL字符集不統一出現的中文亂碼問題

最近遇到一串關於MYSQL中文亂碼的問題,問題背景是這樣的:

在此之前,伺服器上安裝好MySQL之後就立馬重新配置了字符集為utf8,之後用Navicat進行資料匯入,發現中文的字元匯入之後全是亂碼,然後查論壇很

快通過以下方式解決了:建立連線時編碼選擇UTF-8,把使用MYSQL字符集之前的勾勾去掉。

資料庫的屬性設定為:

OK,Navicat裡的中文字元正常了。於是 ,開心的進行資料匯入,一切感覺完美~

接下來我在命令列採用最簡單的mysqldump方法進行備份,備份成功,因為都是測試資料,我順手開啟備份好的檔案一看,又是亂碼!之後命令列直接進到資料庫查詢,

果然查詢結果也是亂碼!我用命令列建了一個測試表,插入中文資料,查表,顯示正確;Navicat查表,亂碼。這是什麼情況~明明兩邊都是UTF-8

編碼方式。

內心一萬隻羊駝奔過...

OK 我們現在來一步步排查問題:

首先,開啟/etc/my.cnf 檔案檢視是否字符集配置正確,果然,在[mysqld] 下錯寫成了default-character-set=utf8

正確的配置方式:

先備份一下my.cnf檔案,然後 vim /etc/my.cnf 插入以下幾行

[client]

default-character-set=utf8

[mysqld]

character-set-server=utf8  #注意這行不要寫成 default-character-set=utf8

[mysql]

no-auto-rehash 

儲存之後service mysqld restart  啟動成功  ,進行之前的資料測試,亂碼問題依然存在。能兩邊的字符集真的不一樣呢?

查了一些資料才知道:只要涉及到文字的地方,就會存在字符集和編碼方式。對於MySQL資料庫系統而言,使用者從MySQL client端敲入一條sql語句,通過TCP/IP傳遞給

MySQL server程序,到最終存入server端的檔案,每個環節都涉及到字元儲存。涉及到字元儲存的地方,就涉及到字符集編碼。

我們就用 show variables like'char%';和 showvariables like 'collation_%';來檢視一下:

分別在MYSQL、Navicat中執行命令;

 

兩邊有些字符集和校對的系統變數是不同的。

至此,我找到了問題的關鍵。

最後我們去解決問題,我有兩種方法:

①我們以MySQL配置為準。在Navicat 中執行以下命令:

setcharacter_set_client= utf8;

setcharacter_set_connection =utf8 ;

setcharacter_set_results=utf8 ;

再檢視字符集,兩邊就一致了。進行測試,亂碼問題解決。