WordPress のデータベースの文字コードと照合順序

このページは、WordPress のデータベースの文字コードと照合順序の調査内容を記載するページです。

注意

  • このページに記載してある内容は WordPress 5.3.2 時点の内容です。将来のバージョンでは仕様が変更されているかもしれません。

文字コード

おおまかな条件 文字コード
DB_CHARSET が utf8, utf8mb4 以外 (wp-config.php で定義) DB_CHARSET の値
DB_CHARSET が utf8, utf8mb4 かつ utf8mb4 が使える環境 (※1) utf8mb4
DB_CHARSET が utf8, utf8mb4 かつ utf8mb4 が使えない環境 utf8

※1 「utf8mb4 が使える」 = MySQL 5.5.3 以上 (+ libmysql 5.5.3 以上, mysqlnd 5.0.9 以上)

照合順序

DB_COLLATE が 空または未定義の場合

おおまかな条件 照合順序
決定した文字コード (※1) が utf8mb4 かつ MySQL 5.6 以上 utf8mb4_unicode_520_ci
決定した文字コードが utf8mb4 (MySQL 5.6 未満) utf8mb4_unicode_ci
上記以外でマルチサイト (is_multisite()) utf8_general_ci
その他 空 (対象 DB のデフォルトの照合順序)

※1 「決定した文字コード」 = 前述の文字コードの内容

(参考) 文字コード、照合順序が決定・使用されるまでのコードの流れ

  • wp-config.php で DB_CHARSET, DB_COLLATE 定義 (あれば)
  • wpdb::__construct()
    • wpdb::db_connect()
      • wpdb::init_charset()
        • DB_CHARSET, DB_COLLATE の値をもとに文字コードと照合順序をいったん仮決定
        • wpdb::determine_charset()
          • wpdb::has_cap() → utf8mb4 等が使用できるか判別
          • 文字コード、照合順序の決定
        • $this->charset, $this->collate の設定
      • wpdb::set_charset() → SQL 実行時に使用する文字コード、照合順序の指定 (SET NAMES 文字コード COLLATE 照合順序)
  • (略)

テーブルの生成時

  • 上記の流れ
  • (中略)
  • wp_get_db_schema()
    • wpdb::get_charset_collate()
      • $this->charset, $this->collate を使って DEFAULT CHARCTER SET, COLLATE の SQL 文 (CREATE TABLE) の返却

参考