WordPress 自訂資料表寫入中文變問號

為了實作 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 );

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Picture of 賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!