MySQL之控制檯編碼問題

編碼(編碼問題只存在於控制檯,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*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章