首頁  >  文章  >  資料庫  >  關於MySQL字符集問題詳解(圖)

關於MySQL字符集問題詳解(圖)

黄舟
黄舟原創
2017-03-18 14:34:491280瀏覽

最近公司一個舊的專案需要支援 emoji 表情,一開始以為只要修改下資料庫的表格欄位就好,沒想到引發了一系列的問題。這裡總結下,以作備忘。

01 MySQL 字元集設定

關於MySQL字符集問題詳解(圖)

character_set_server: 預設的內部操作字元集
character_set_client:客戶端來源資料使用的字元集
character_set_connection:連接層字元集
character_set_results:查詢結果字元集
character_set_database:  目前選取資料庫的預設字元集
character_set_system:    系統元資料(欄位名稱等)字元集

02 MySQL 中的字元集轉換過程

  • ##02 MySQL 中的字元集轉換過程 #MySQL Server收到請求時將請求資料從

    character_set_client
  • 轉換為
  • character_set_connection

    ;

  • #進行內部操作前將請求資料從
      character_set_connection
    • 轉換為內部操作字元集,其確定方法如下:

    • 使用表中欄位的CHARACTER SET 設定值;

    • 若上述值不存在,則使用對應資料表的DEFAULT CHARACTER SET 設定值(MySQL擴展,非SQL標準);

    • 若上述值不存在,則使用對應資料庫的DEFAULT CHARACTER SET 設定值;

    • 若上述值不存在,則使用
    character_set_server
  • # 設定值。

  • 將操作結果從內部操作字元集轉換為
character_set_results

, 回應請求。

03 MySQL 啟動關於MySQL字符集問題詳解(圖)設定檔

my.cnf



default-character-set: 設定mysql 指令行連接的預設字元集

character-set-server: 設定係統內部操作字元集(即上文說到的character_set_server)

collat​​ion_server: 設定係統預設字元集排序

    04 PHP連接MySQL(以PDO連線方式為例)
  • 常見的兩種設定字元集的方式

  • mysql:host=localhost;dbname=db_demo;charset=utf8mb4

PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"

  • 05 總結

  • 資料表格欄位的字元集需要是
  • utf8mb4

    ,這個是剛需#一般character_set_clientcharacter_set_connection character_set_results 的字元集相同,且都為

    utf8mb4
  • (這三個參數預設都是
  • utf8mb4

    ,如果不是,是實作不了emoji 表情的,原因參考字元集轉換過程)。

    連接資料庫
  • 的字元集也需要是
  • utf8mb4

    character_set_server
  • character_set_database

    等預設字元集的類型並沒有那麼重要,但最好還是保持一致

###TP 的坑果然是多,遠離TP## #######

以上是關於MySQL字符集問題詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn