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
) の返却
参考
- wpdb::db_connect() | Method | WordPress Developer Resources
- wpdb::init_charset() | Method | WordPress Developer Resources
- wpdb::determine_charset() | Method | WordPress Developer Resources
- wpdb::has_cap() | Method | WordPress Developer Resources
- wp_get_db_schema() | Function | WordPress Developer Resources
- wpdb::get_charset_collate() | Method | WordPress Developer Resources
- wpdb::set_charset() | Method | WordPress Developer Resources