關於MySQL中的8個 character_set 變數說明

小異常發表於2018-04-12

版權宣告:本文為 小異常 原創文章,非商用自由轉載-保持署名-註明出處,謝謝!
本文網址:https://blog.csdn.net/sun8112133/article/details/79921734

  本篇會簡單介紹在 MySQL 中關於 8個 character_set 變數的基本作用。
  
  使用下列SQL語句可以檢視 MySQL中8個 character_set 變數

SHOW VARIABLES LIKE '%char%';

character_set 變數

8個 character_set 變數:

  一、character_set_client

  二、character_set_connection

  三、character_set_database

  四、character_set_filesystem

  五、character_set_results

  六、character_set_server

  七、character_set_system

  八、character_sets_dir





一、character_set_client

  主要用來設定客戶端使用的字符集。

二、character_set_connection

  主要用來設定連線資料庫時的字符集,如果程式中沒有指明連線資料庫使用的字符集型別則按照這個字符集設定。

三、character_set_database

  主要用來設定預設建立資料庫的編碼格式,如果在建立資料庫時沒有設定編碼格式,就按照這個格式設定。

四、character_set_filesystem

  檔案系統的編碼格式,把作業系統上的檔名轉化成此字符集,即把 character_set_client轉換character_set_filesystem, 預設binary是不做任何轉換的。

五、character_set_results

  資料庫給客戶端返回時使用的編碼格式,如果沒有指明,使用伺服器預設的編碼格式。

六、character_set_server

  伺服器安裝時指定的預設編碼格式,這個變數建議由系統自己管理,不要人為定義。

七、character_set_system

  資料庫系統使用的編碼格式,這個值一直是utf8,不需要設定,它是為儲存系統後設資料的編碼格式。

八、character_sets_dir

  這個變數是字符集安裝的目錄。


在啟動mysql後,我們只關注下列變數是否符合我們的要求

  • character_set_client
  • character_set_connection
  • character_set_database
  • character_set_results
  • character_set_server

下列三個系統變數我們不需要關心,不會影響亂碼等問題

  • character_set_filesystem
  • character_set_system
  • character_sets_dir

更改以上字符集直接 set character_set_XXX = “gbk”;(XXX是寫以上的變數名)


藉助網上的一個完整的使用者請求的字符集轉換流程來更好的理解上述幾個變數:

  1. mysql Server收到請求時將請求資料從 character_set_client 轉換為 character_set_connection
  2. 進行內部操作前將請求資料從 character_set_connection 轉換為內部操作字符集,步驟如下
      A. 使用每個資料欄位的 CHARACTER SET 設定值;
      B. 若上述值不存在,則使用對應資料表的字符集設定值
      C. 若上述值不存在,則使用對應資料庫的字符集設定值;
      D. 若上述值不存在,則使用 character_set_server 設定值。
  3. 最後將操作結果從內部操作字符集轉換為 character_set_results

字符集轉換流程

相關文章