質問のタイトルが示唆しているように、WordpressがMySQLの文字セットと照合オプションをどのように処理するかを理解しようとしています。以下に示すように、私にはあまり意味がありません...
インストールページの指示に従ってWordpressをインストールしました。
https://codex.wordpress.org/Installing_WordPress
指示の一部として、コマンドライン、つまりコマンドでMySQLデータベースを手動で作成するためのアドバイスに従いました。
mysql> CREATE DATABASE databasename;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"hostname"
-> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT
さらに、指示どおり、「wp-config.php」ファイルを編集してUTF-8文字セットを使用しました。
define( 'DB_CHARSET', 'utf8' );
...そして照合設定を空白のままにします:
define( 'DB_COLLATE', '' );
ここからが楽しみの始まりです...
MySQL UTF-8の一部ではないが、UTFなどのUTF-8 MB4の一部である文字を投稿に入力すると、レンダリングされたページに正しく表示されます。文字セットをUTF-8 MB4に設定していないため、これは起こらないと思っていましたが、より制限されたUTF-8(もちろん、MySQLで定義されているとおり、一般的には理解されていません)。
コマンドラインでMySQLの問題を調査すると、さらにおかしくなります。を実行すると
show variables like 'char%';
、次の応答が返されます。+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
データベースの文字セットは、latin1ではなくUTF-8であると想定していました。
コマンドを実行する
show variables like 'collation%';
と、出力は次のようになります。+----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+
明らかな理由から、これはさらに奇妙です(UTF-8データベースのデフォルトのlatin1_swedish_ci照合を期待していなかったでしょう)。
- 最後に、を実行する
show full columns from mywpdatabase.wp_posts;
と、値がNULLでない出力行で照合順序が次のように示されます。
| post_content_filtered | longtext | utf8mb4_unicode_ci |
次に私の質問-これはどのように説明できますか?データベースが構成でUTF-8として定義されている場合、WordpressインストールがUTF-8 MB4文字を正しくレンダリングするのはなぜですか?MySQLでデータベースがUTF-8ではなく、latin1スウェーデン照合として表示されるのはなぜですか?そして、なぜこれらすべてにもかかわらず、テーブルの個々のフィールドがutf8mb4_unicode_ciであるのでしょうか。WordpressがMySQLで動作する方法を低レベルで説明すると非常に役立ちます。ありがとうございました!