錯誤 Incorrect string value: '\\xA9\\xC1...' for column 'pdetails' 發生原因:
gb2312(僅支援 6,763 個漢字)SET NAMES gb2312,但資料層面仍無法存儲超集字符ALTER TABLE `your_table`
MODIFY `pdetails` TEXT CHARACTER SET gbk COLLATE gbk_chinese_ci;
-- 1. 資料庫層級
ALTER DATABASE `your_db` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 2. 表層級(含所有欄位)
ALTER TABLE `your_table` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 3. 連線設定(PHP PDO 範例)
$dsn = "mysql:host=localhost;dbname=your_db;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"]);
| 字符集 | 支援字符 | 最大長度 | 適用場景 |
|---|---|---|---|
| gb2312 | 6,763 漢字 | 2 bytes | 舊系統維護 |
| gbk | 21,003 字符 | 2 bytes | 繁簡中文混雜 |
| utf8mb3 | BMP 平面 | 3 bytes | 舊版 UTF-8 |
| utf8mb4 | 全 Unicode | 4 bytes | 現代應用首選 |
INSERT INTO t(c) VALUES ('㈠㊣😀');SELECT c, HEX(c), CHAR_LENGTH(c) FROM t;SHOW VARIABLES LIKE 'character_set%';