插件激活时的默认表排序规则?

时间:2010-12-25 作者:tkit

我在跟踪this 要使我的插件在插件激活时自动创建一个表,但所发生的是,虽然所有表(整个db)都是utf8\\u general\\u ci,但新创建的表是latin1\\u swedish\\u ci。。。为什么它不也是utf8?我认为默认情况下它也是utf8,因为我有:

define(\'DB_COLLATE\', \'utf8_general_ci\');
在我的wp配置中。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);
}
}
谢谢你

4 个回复
最合适的回答,由SO网友:hakre 整理而成

您忽略了一点,即不仅对数据库,而且对表甚至字段都有排序规则。

因此,从您的角度来看,我假设您的CREATE TABLE语句是“不完整的”。在使用SQL语句之前,请先学习该语言。

看见CREATE TABLE Syntax (MySQL Manual).

尤其地table_options / table_option[DEFAULT] COLLATE [=] collation_name 在那里。

更新:

请参见Wordpress Database Charset and Collation Configuration 有关字符集和排序规则的详细说明,请参阅在何处以及如何设置wordpress。

SO网友:tkit

万一有人需要这个,你可以这样设置排序规则。。后的行UNIQUE KEY id (id) 零件应如下所示:

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";

SO网友:Mack

这个$wpdb 对象现在有a member function 用于将字符集和排序规则检索为可以直接添加到SQL的字符串CREATE TABLE 询问。

$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name ( $fields ) $charset_collate;"
此字符串将与WP_CHARSETWP_COLLATE 配置文件中的值(如果存在),并且used internally to create Wordpress\'s default tables.

SO网友:Paul

我一直在用这个

  global $wpdb;
  // $charset_collate = $wpdb->get_charset_collate(); //This outputs an unsupported charset for a lot of non english speakers for some reason
  $charset_collate = "";
  $collation = $wpdb->get_row("SHOW FULL COLUMNS FROM {$wpdb->posts} WHERE field = \'post_content\'");

  if(isset($collation->Collation)) {
    $charset = explode(\'_\', $collation->Collation);

    if(is_array($charset) && count($charset) > 1) {
      $charset = $charset[0]; //Get the charset from the collation
      $charset_collate = "DEFAULT CHARACTER SET {$charset} COLLATE {$collation->Collation}";
    }
  }

  if(empty($charset_collate)) { $charset_collate = $wpdb->get_charset_collate(); } //Okay fine, we\'ll try it your way

结束

相关推荐

Corrupt Wordpress Database

我认为这是最奇怪的文字印刷问题。一个拥有大量帖子数据库的客户网站已经有了自己的想法。前一分钟一切似乎都很好,接下来的帖子、类别和标签都不见了。此时仪表板告诉我9个类别中有2309个帖子,但当我单击admin中的categories链接时,列表中没有任何帖子。我可以在admin中看到所有帖子,但尽管它们过去被分配到类别并列出标签,但现在它们都“未分类”,没有标签。很明显,wordpress数据库在某种程度上已经损坏,但从哪里开始尝试修复呢!?以下是我迄今为止测试的内容:插件–我关闭了所有当前的插件。主题–我