MySQL 5.0.16 存儲中文出現亂碼,或報錯 Illegal mix of collations。
Chinese Simplified (zh-utf-8)UTF-8 Unicode (utf8)gbk_chinese_ci (或 utf8_general_ci)
-- 庫級
CREATE DATABASE mydb DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
-- 表級 (MyISAM)
CREATE TABLE t (...) ENGINE=MyISAM DEFAULT CHARSET=gbk;
-- 表級 (InnoDB)
CREATE TABLE t (...) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40;
SHOW CREATE TABLE t\G
-- 關鍵檢查:
-- varchar 列 Collate 應為 gbk_chinese_ci
-- 非字符類型 (int/date) Collate 為空 (正常)
-- PHP (mysqli)
$db->query("SET CHARACTER SET GBK");
-- 或
$db->set_charset('gbk');
-- PDO
$pdo->exec("SET NAMES GBK");
等價於設置 Connection Character Sets and Collations 三個會話變量。
新項目**無理由使用 GBK**。全鏈路 utf8mb4:
character-set-server=utf8mb4DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ciSET NAMES utf8mb4