自定义DB_COLLATE(排序规则)值在全新安装上不起作用吗?

时间:2017-08-30 作者:George Dimitriadis

我一直知道WordPress使用utf8_general_ci 作为表排序规则,但最近它一直在安装utf8mb4_unicode_520_ci.

我所做的是:

从WordPress下载WordPress。组织重命名wp-config-example.phpwp-config.php

/** Database Charset to use in creating database tables. */  
define(\'DB_CHARSET\', \'utf8\');

/** The Database Collate type. Don\'t change this if in doubt. */  
define(\'DB_COLLATE\', \'utf8_general_ci\');  
正确设置数据库配置,并使用如上所述的字符集和排序规则创建空数据库。

打开mysite。提取WordPress并运行WordPress安装的devutf8mb4 和排序规则utf8mb4_unicode_520_ci. 旁注:我稍后安装的一些插件将具有表排序规则utf8\\U general\\U ci运行mysql --version 在我的机器上返回:

mysql  Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using  EditLine wrapper
注意:如果我使用默认值DB_COLLATEDB_CHARSET (省略我的定义),表得到utf8mb4_unicode_520_ci, 现在看来这是默认值。

那么,我如何告诉WordPress使用正确的编码创建表呢?

提前谢谢。

1 个回复
SO网友:Paul G.

您在这里只有一个选项,按照大多数标准,这是不建议的。您必须编辑核心WordPress文件:wp-db.php

原因是没有过滤器来更改这些,代码有点硬编码。WordPress检查它选择的排序规则的可用性。如果您只需要它来设置站点,而不再需要它,那么修改临时文件就可以了。请注意,一旦WordPress更新,此代码可能会被替换。

步骤:

打开文件/wp-includes/wp-db.php 要进行编辑,请找到调用的函数determine_charset(). 在WordPress 4.8.1中,它位于第773行,创建函数的第一行return compact( \'charset\', \'collate\' );函数如下所示:

public function determine_charset( $charset, $collate ) {
          return compact( \'charset\', \'collate\' );
不要删除任何内容,只需在函数定义下面添加1行即可。

此外,这假设您在WP配置中指定了自定义字符集和排序

结束