Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (gbk_bin,IMPLICIT) for operation '=' SQL State: HY000, Error Code: 1267
**數據庫默認字符集與建表時指定字符集不一致**,導致列級校對規則衝突。例如庫為 gbk,表未顯式指定而繼承了 latin1 或 utf8,或列級單獨指定了 gbk_bin。
CREATE TABLE `teachers` (
`id` INT(11) NOT NULL DEFAULT '0',
`name` VARCHAR(20) DEFAULT NULL,
`password` VARCHAR(20) DEFAULT NULL,
`department_id` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
關鍵點:DEFAULT CHARSET=gbk 確保表級、列級默認校對規則一致 (gbk_chinese_ci)。
-- 僅修改表默認字符集 (影響後續新增列)
ALTER TABLE `teachers` DEFAULT CHARACTER SET gbk;
-- 完整轉換現有列數據 (推薦)
ALTER TABLE `teachers` CONVERT TO CHARACTER SET gbk COLLATE gbk_chinese_ci;
CREATE DATABASE `mydb` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
-- 或修改現有庫
ALTER DATABASE `mydb` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
-- 客戶端連接後立即執行
SET NAMES gbk;
-- 等價於
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;
JDBC URL 參數 (舊版驅動需顯式):
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=GBK&autoReconnect=true
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 關鍵變量應均為 gbk / gbk_chinese_ci
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ciSET NAMES utf8mb4 / JDBC characterEncoding=utf8mb4[mysqld]:character-set-server=utf8mb4, collation-server=utf8mb4_unicode_ciutf8 (實為 utf8mb3) 截斷 Bug。