網上一次MySQL中文亂碼問題的處理過程
1 企鵝上朋友問我MySQL查詢出來的數據在工具裡面出來的是亂碼,如圖所示:
2 讓他去檢查mysql服務器的字符集設置,可以看到都是utf8正常的,如圖所示:
3 我猜測一定是數據錄入的時候出的問題,朋友說是通過source方式錄入的,然後我去linux服務器上面檢查導入的數據文件:
more /opt/soft/20130821ajtdrz_1.sql: 如圖所示:
4 然後我讓他把文件下載從服務器下載下來在本地看看,他下載下來之後,顯示如圖正常:
5,奇怪了,而且 而且網站前台顯示也是好的,不過這個情況也不是不能解釋,原來做短信系統有過類似的經歷,就是錄入的和網頁前台顯示的編碼如果是一致的話,不管你中間存儲的是什麼類型,那麼即使通過別的工具看到的是亂碼,但是網頁前台一定顯示是正常的。我讓他看下他的editplus下面sql文件編碼格式是否是utf8格式的,如圖所示:
看到這裡他保存的編碼格式也是utf-8的啊,怎麼會傳入到linux下變成亂碼了呢?
6, 我去看linux下面的語言格式
[root@AY13080711045157190fZ soft]# echo $LANG
en_US.UTF-8
看到這裡我推斷出2個原因
1 不是zh_US.UTF-8模式的。難道是中文安裝失敗導致傳到linux上面的sql文件是亂碼的形式的嗎?
2 要不就是傳過來的sql文件保存格式有問題。(但是朋友說了保存格式正確,這點也許概率不大)
7, 我上網google了很多資料,發現如果是en_US.UTF-8語言模式下,是可以正常顯示漢字的只要,傳上來的sql文件的編碼模式是linux模式的utf8編碼就行了,到此我可以判定很大概率是朋友上傳得sql文件有問題的。我讓他方便的話把文件發給我,我在這邊檢測下他的sql文件。結果這兄弟,沒有回復了,估計是有要事走開了。
8,1個半小時後,這兄弟回來了,跟我說:“不好意思啊。這麼晚回你 。剛開回去了,問題解決了, 是我文件編碼問題。我另存為下utf8 完了再傳上去就好使 了。”,就發圖給我如下:
總結如下:中文顯示亂碼,大概有這麼幾個方面
1 服務器端字符串設置,一般統一為utf-8
2 client端字符串設置,看是否為utf8
3 上傳的數據的編碼模式,一定要選與服務器端的編碼模式一致。