編碼(編碼問題只存在於控制檯,navicat等可視化工具會在連接時自動設置編碼)
①. 查看MySQL數據庫編碼
* SHOW VARIABLES LIKE 'char%';
②. 編碼解釋
* character_set_client:MySQL使用該編碼來解讀客戶端發送過來的數據,例如該編碼爲UTF8,那麼如果客戶端發送過來的數據不是UTF8,那麼就會出現亂碼
* character_set_results:MySQL會把數據轉換成該編碼後,再發送給客戶端,例如該編碼爲UTF8,那麼如果客戶端不使用UTF8來解讀,那麼就會出現亂碼
其它編碼只要支持中文即可,也就是說不能使用latin1
③. 控制檯亂碼問題
* 插入或修改時出現亂碼:
> 這時因爲cmd下默認使用GBK,而character_set_client不是GBK的原因。我們只需讓這兩個編碼相同即可。
> 因爲修改cmd的編碼不方便,所以我們去設置character_set_client爲GBK即可。
* 查詢出的數據爲亂碼:
> 這是因爲character_set_results不是GBK,而cmd默認使用GBK的原因。我們只需讓這兩個編碼相同即可。
> 因爲修改cmd的編碼不方便,所以我們去設置character_set_results爲GBK即可。
* 設置變量的語句:
> set character_set_client=gbk;
> set character_set_results=gbk;
注意,設置變量只對當前連接有效,當退出窗口後,再次登錄mysql,還需要再次設置變量。
爲了一勞永逸,可以在my.ini中設置:
設置default-character-set=gbk即可。
④. 指定默認編碼
我們在安裝MySQL時已經指定了默認編碼爲UTF8,所以我們在創建數據庫、創建表時,都無需再次指定編碼。
爲了一勞永逸,可以在my.ini中設置:
設置character-set-server=utf8即可。
character_set_client | utf8 --> mysql把我們客戶端傳遞的數據都當成是utf8!一是給它傳遞utf8,二是如果我們傳遞的是gbk,那麼需要修改這個變量爲gbk
character_set_connection | utf8
character_set_database | utf8
character_set_results | utf8 --> mysql發送給客戶端的數據都是utf8的。一是客戶端用utf8編碼,二是如果客戶端使用gbk來編碼,那麼需要修改這個變量爲gbk的。
character_set_server | utf8
character_set_system | utf8
----------------------------
character_set_client=utf8,無論客戶端發送的是什麼編碼的數據,mysql都當成是utf8的數據!
> 若客戶端發送的是GBK
> 服務器會當成utf8對待
> 總結:必然亂碼!
處理問題的手段有兩種;
> 讓客戶端發送utf8的數據(行不通)
> 把character_set_client修改爲gbk
set character_set_client=gbk; --> 只在當前窗口內有效,也就是說,關閉窗口後,再打開,又回到utf8了。
character_set_results=utf8,把數據用什麼編碼發送給客戶端!
> 若服務器發送給客戶端的是utf8的數據
> 客戶端會把它當成gbk,因爲我們的小黑屏,只能顯示gbk
> 總結:必然亂碼!
處理問題的手段有兩種:
> 讓服務器發送gbk的數據:set character_set_results=gbk
> 讓小黑屏使用utf8來解讀(行不通)
my.ini
在總配置文件中進行配置,可以一勞永逸
[client]
port=3306
[mysql]
default-character-set=gbk /*它可以一勞永逸!它可以修改三個變量:client、results、connection*/