1. 程式人生 > >Linux下MySQL出現亂碼的解決方法以及如何設定編碼方式

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%';

你可以看到全變為 utf8 。

但是,這只是一種假象。此種方式只在當前狀態下有效,當重啟資料庫服務後失效。 自己可以嘗試一下!

這也是網上很多的解決方法,不見效果,自己當時也嘗試了很多次,不成功!這裡提出來,希望大家不要採坑!

* 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內容如下:

這裡寫圖片描述

修改之後檢視如下:

這裡寫圖片描述

經過上述的修改,就不會出現亂碼,如下:

這裡寫圖片描述