正如问题标题所暗示的那样,我希望了解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-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/ | +--------------------------+----------------------------+
我本来希望数据库字符集是UTF-8,而不是latin1。
如果我运行命令
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中显示为latin1,瑞典语排序规则,而不是UTF-8?而且,尽管如此,表中的各个字段为何都是utf8mb4_unicode_ci?对Wordpress与MySQL的工作方式进行低级解释将非常有帮助。谢谢!