SQLクエリを使わずにWordPressでDBテーブルの文字セットと照合順序を取得する簡単な方法はありますか?
$wpdb->charset
と$wpdb->collate
があります。これらの値の1つが空になるかどうか、またはいつ空になるのかわからないので、空の値に備えることをお勧めします。
私の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 );
ファイルwp-admin/includes/upgrade.php
にはwp-admin/includes/schema.php
が含まれています。これは一番上でglobal( sourceを参照 )と宣言しています。
// 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()
がこれを処理するので 。