Linux下MySQL出現亂碼的解決方法以及如何設定編碼方式
開發環境
Cent OS 7.0;
MySQL:Server version: 5.6.33 MySQL Community Server (GPL)
最新版:Server version: 5.7.19 MySQL Community Server (GPL) 請看最後補充內容!!!
注意版本,不同版本之間修改的方式是會略有不同!!!
錯誤重現
首先我已經確保了前端介面傳入到後臺伺服器的編碼沒有問題!Tomcat的編碼方式已經改成了UTF8!(可以通過除錯的方式,在後端程式碼傳入引數的時候檢視是否有亂碼!)
但是傳入到資料庫中卻出現了亂碼的問題!建立表的時候使用的編碼方式是:utf8 -- UTF-8 Unicode
亂碼錶如下:
這些個 ‘?’就是中文亂碼的情況。
問題分析
MySQL建立資料庫時指定編碼很重要,很多開發者都使用了預設編碼,安裝了之後不會再去設定編碼的問題(當然可能我很初級的原因),亂碼問題可是防不勝防。
網頁資料一般採用UTF8編碼,而資料庫預設為latin1
。我們可以通過修改資料庫預設編碼方式為UTF8來減少資料庫建立時的設定,也能最大限度的避免因粗心造成的亂碼問題。
我們遵循的標準是,資料庫,表,欄位和頁面或文字的編碼要統一起來,我們可以通過命令檢視資料庫當前編碼:
mysql> SHOW VARIABLES LIKE 'character%';
這是在出現亂碼的時候顯示的內容,發現很多對應的都是 latin1
,我們的目標就是在下次使用此命令時latin1
能被UTF8取代。
問題解決
* 1、第一階段:*
在mysql控制檯通過編碼命令進行設定:
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
然後 mysql> SHOW VARIABLES LIKE 'character%';
但是,這只是一種假象。此種方式只在當前狀態下有效,當重啟資料庫服務後失效。 自己可以嘗試一下!
這也是網上很多的解決方法,不見效果,自己當時也嘗試了很多次,不成功!這裡提出來,希望大家不要採坑!
* 2、第二階段:*
如何正確的修改,我們只有修改my.cnf(一般都是在/etc/my.cnf目錄下)檔案,
從my.cnf下手(標籤下沒有的新增,有的修改)
補充:
在Server version: 5.7.17 MySQL Community Server (GPL)
版本中,配置檔案的位置是:/etc/mysql/mysql.conf.d/mysqld.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
以上3個section都要加default-character-set=utf8
,平時我們可能只加了mysqld一項。
注意:上邊的配置需要根據具體的mysql版本,不同的mysql版本可能不包含上述的三個section,也沒有必要全部都設定,平時我們可能只加了mysqld一項。
例如我的配置檔案和修改之後的效果(注意我的mysql版本):
我的這個my.cnf檔案只有mysqld
這個section,因此可以直接加上default-character-set=utf8
即可。
如果,你的配置檔案含有client、mysql
標籤的話,可以在下邊加入,例如下邊的配置示例:
修改之後,然後重啟mysql服務:
service mysqld restart
然後登入mysql控制檯檢視:
編碼已經變成utf8,插入一條資料檢視結果是否正確:
到此為止!編碼的問題已經解決!
番外話:
但是有一個值得注意的是,MySQL的一些版本(Server version: 5.6.27-log Source distribution)
如果在建立資料庫的時候,編碼方式選擇的utf8,例如下邊:
正常的使用卻沒有出現任何的編碼問題,進入mysql控制檯,檢視編碼:
可以看到下邊兩個是utf8的:
| character_set_database | utf8
| character_set_server | utf8
因此,在進行開發的時候不妨先通過下邊的命令確認具體的編碼之後,再去開發,以免出現編碼的問題:
mysql> show variables like'%char%';
個人微信公眾號,歡迎掃碼訂閱,精彩內容,每天分享:
最新版:Server version: 5.7.19 MySQL Community Server (GPL) 請看最後補充內容!!!
預設情況下的編碼方式為:
配置檔案位置: /etc/my.cnf
修改方式:
1、在[client]欄位里加入default-character-set=utf8,如下:
[client]
default-character-set=utf8
2、在[mysqld]欄位里加入character-set-server=utf8,如下:
[mysqld]
character-set-server=utf8
3、在[mysql]欄位里加入default-character-set=utf8,如下:
[mysql]
default-character-set=utf8
預設情況下,我只修改了[mysqld],修改後的/etc/my.cnf
內容如下:
修改之後檢視如下:
經過上述的修改,就不會出現亂碼,如下: