為了實作 WooCommerce 推播通知外掛的發送紀錄,考量到記錄的內容與屬性,我自己開了一張資料表來存放,在本機測試都沒問題,結果放上伺服器後發現到只要欄位裡面有出現中文的地方全部變成問號:
查到的方法都說是要去改資料庫的編碼規則,但由於這外掛會用在不同的主機上,因此這條路行不通,於是在想會不會是資料欄位本身編碼設定的問題,結果用 phpMyAdmin 查看資料表結構的時候發現資料欄位的編碼都被設成拉丁語系:
找到這問題後,在建立資料表時只要在會出現中文的欄位裡面多設定 Charset 就能解決了,具體實作如下:
global $wpdb;
$table_name = $wpdb->prefix . 'db_prefix';
$sql = "CREATE TABLE $table_name (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` INT,
`user_info` VARCHAR(255) CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate},
`order_id` INT,
`notify_type` VARCHAR(255) CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate},
`notify_content` LONGTEXT CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate},
`notify_time` DATETIME,
`status` VARCHAR(255) CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate}
);
DEFAULT CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate}";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
$result = dbDelta( $sql );