Шрифт базы данных WordPress / Сортировка

Есть ли простой способ получить кодировку и сопоставление таблиц БД в WordPress, не прибегая к SQL-запросам?

Solutions Collecting From Web of "Шрифт базы данных WordPress / Сортировка"

Есть $wpdb->charset и $wpdb->collate . Я не уверен, если или когда одно из этих значений может быть пустым, поэтому лучше подготовиться к пустым значениям …

Из моего класса DB:

 /** * Get table charset and collation. * * @since 2012.10.22 * @return string */ protected static function get_wp_charset_collate() { global $wpdb; $charset_collate = ''; if ( ! empty ( $wpdb->charset ) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty ( $wpdb->collate ) ) $charset_collate .= " COLLATE $wpdb->collate"; return $charset_collate; } 

Используется для создания таблицы следующим образом:

  global $wpdb; // encoding $charset_collate = self::get_wp_charset_collate(); $table = self::get_table_name(); // the user could have just deleted the plugin without running the clean up. $sql = "CREATE TABLE IF NOT EXISTS $table ( ID bigint unsigned NOT NULL auto_increment, event_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, event_group tinytext, event_title text, PRIMARY KEY (ID) ) $charset_collate;"; // make dbDelta() available require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); 

Связано: Проблема с блоком charset UTF-7

Файл wp-admin/includes/upgrade.php включает wp-admin/includes/schema.php . Это вверху объявляется глобальным ( см. Источник ):

 // Declare these as global in case schema.php is included from a function. global $wpdb, $wp_queries, $charset_collate; ... $charset_collate = ''; if ( ! empty( $wpdb->charset ) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty( $wpdb->collate ) ) $charset_collate .= " COLLATE $wpdb->collate"; 

Поэтому вы можете следить за ответом @ Toscho и проверять $wpdb . Или, используя пример Toscho:

 global $wpdb, $charset_collate; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; $sql = "CREATE TABLE $table ( ID bigint unsigned NOT NULL auto_increment, event_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, event_group tinytext, event_title text, PRIMARY KEY (ID) ) $charset_collate;"; dbDelta( $sql ); 

Обратите внимание, что IF NOT EXISTS не требуется, поскольку dbDelta() обрабатывает это .