问题描述

当我的插件被激活时,我正在关注 this 使我的插件 auto-create 成为一个表,但是所有的表 (整个数据库) 都是 utf8_general_ci,新创建的表是 latin1_swedish_ci … 为什么不是 UTF8?我以为这也是 utf8 默认,因为我有:

define('DB_COLLATE', 'utf8_general_ci');

在我的 wp-config.php … 我有一切完全一样的提供的链接,除了功能名称,我有不同的 SQL 字段… 如何使默认新创建的表 utf8?

这是我的功能:

function duende_install() {
global $wpdb;
global $duende_db_version;

$table_name = $wpdb->prefix . "duendes";
if($wpdb->get_var("show tables like '$table_name'") != $table_name) {
    $sql = "CREATE TABLE " . $table_name . " (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        shape tinytext NOT NULL,
        integrity tinytext NOT NULL,
        length tinytext NOT NULL,
        drone tinytext NOT NULL,
        wood tinytext NOT NULL,
        mouth tinytext NOT NULL,
        rim tinytext NOT NULL,
        bell tinytext NOT NULL,
        loud tinytext NOT NULL,
        mass tinytext NOT NULL,
        finish tinytext NOT NULL,
        inlay tinytext NOT NULL,
        price smallint DEFAULT '0' NOT NULL,
        sold tinytext NOT NULL,
        UNIQUE KEY id (id)
    );";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);

    add_option("duende_db_version", $duende_db_version);
}
}

谢谢

最佳解决方案

你没有注意到,不仅对于数据库进行排序规则,还包括表格甚至字段。

因此,从您的角度来看,我认为您的 CREATE TABLE 语句是”not complete” 。在使用 SQL 语句之前,请先学习语言。

请参阅 CREATE TABLE 语法 (MySQL 手册) 。

特别是 table_options /table_option[DEFAULT] COLLATE [=] collation_name

更新:

请参阅 WordPress Database Charset and Collation Configuration 中的 in-depth 描述,以及如何设置 wordpress 关于字符集和排序规则。

次佳解决方案

为了防止有人需要这样做,您可以按照这种方式设置排序规则.UNIQUE KEY id (id)部分后面的行应如下所示:

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。