Параметры сортировки таблицы по умолчанию при активации плагина?


Я следую это чтобы мой плагин автоматически создавал таблицу при активации плагина, но происходит то, что, хотя все таблицы (вся бд) являются 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);
}
}

Спасибо

Author: tkit, 2010-12-25

4 answers

Вы упускаете из виду, что параметры сортировки существуют не только для базы данных, но и для таблиц и даже полей.

Поэтому, с вашей точки зрения, я предполагаю, что ваше утверждение CREATE TABLE "не завершено". Прежде чем использовать инструкции SQL, пожалуйста, сначала изучите язык.

См. CREATE TABLE Синтаксис (Руководство по MySQL).

Особенно table_options / table_option и [DEFAULT] COLLATE [=] collation_name там внутри.

ОБНОВЛЕНИЕ:

Пожалуйста, смотрите Кодировка и параметры сортировки базы данных Wordpress Конфигурация для подробного описания, где и как настроить wordpress в отношении кодировки и сортировки.

 5
Author: hakre, 2010-12-26 13:46:22

На всякий случай, если кому-то это понадобится, вы можете настроить параметры сортировки таким образом.. строка после части UNIQUE KEY id (id) должна выглядеть так:

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
 7
Author: tkit, 2010-12-26 09:43:46

Объект $wpdb теперь имеет функцию-член для извлечения набора символов и параметров сортировки в виде строки, которую можно добавлять непосредственно в запросы SQL CREATE TABLE.

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

Эта строка будет соответствовать значениям WP_CHARSET и WP_COLLATE из файла конфигурации (если имеется) и используется внутри для создания таблиц Wordpress по умолчанию.

 1
Author: Mack, 2017-12-07 02:58:09

Я использовал это

  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
Author: Paul, 2016-11-15 20:02:43