web-dev-qa-db-ja.com

プラグインのアクティブ化時のデフォルトのテーブル照合

this に従うことで、プラグインがアクティブになったときにプラグインがテーブルを自動作成するようにしますが、すべてのテーブル(データベース全体)が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);
}
}

ありがとうございました

6
pootzko

DBだけでなくテーブルやフィールドに対しても照合順序があるという点を見逃しています。

したがって、あなたの観点からは、私はあなたのCREATE TABLEステートメントが "未完了"であると仮定します。 SQLステートメントを使用する前に、まず言語を学んでください。

CREATE TABLE構文(MySQL Manual) を参照してください。

特にtable_options/table_option[DEFAULT] COLLATE [=] collation_nameはそこにあります。

更新:

文字セットと照合順序に関するwordpressの設定場所と設定方法については、Wordpressデータベースの文字セットと照合順序の設定を参照してください。

5
hakre

万が一誰かがこれを必要とするのであれば、照合をこのように設定できます。UNIQUE KEY id (id)部分の後の行は次のようになります。

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
7
pootzko

私はこれを使っています

  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
0
Paul

$wpdbオブジェクトは、 メンバ関数 を持ち、SQLのCREATE TABLEクエリに直接追加できる文字列としての文字セットと照合順序を取得します。

$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name ( $fields ) $charset_collate;"

この文字列は設定ファイルからのWP_CHARSETWP_COLLATEの値(もしあれば)と並び、 Wordpressのデフォルトテーブルを作成するために内部的に使用されます。

0
Mack