萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL "Illegal mix of collations" 字符集衝突錯誤三種解決方案

錯誤現象

Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

本質:SQL 語句中涉及的列/參數/字面量字符集校對規則不一致,MySQL 無法隱式轉換。

方案一:應用層轉碼(PHP 為例)

// GB2312 → UTF-8
$utf = iconv('gb2312', 'utf-8', $_REQUEST['keyword']);

// UTF-8 → GB2312
$str = iconv('utf-8', 'gb2312//TRANSLIT', $str);

適用:歷史項目編碼不統一、無法修改數據庫字符集時的快速修復。

方案二:修改表/列字符集統一(治本)

-- 修改表默認字符集(僅影響新建列)
ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

-- 修改具體列字符集(會重建表,大表慎用)
ALTER TABLE `category` MODIFY `nickname` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_bin;

建議全庫統一 utf8mb4 + utf8mb4_unicode_ci(或 utf8mb4_0900_ai_ci)。

方案三:SQL 強制指定校對規則(應急)

-- 原語句
SELECT * FROM {$tablepre}members WHERE nickname = '$nickname';

-- 加 BINARY 強制二進制比較,忽略校對規則
SELECT * FROM {$tablepre}members WHERE nickname = BINARY '$nickname';

或顯式指定:

WHERE nickname COLLATE utf8_bin = 'value' COLLATE utf8_bin

排查檢查清單

  1. SHOW VARIABLES LIKE 'collation%'; 確認服務器/庫/表/連接字符集。
  2. SHOW CREATE TABLE tbl_name; 確認列字符集。
  3. 檢查連接字符集:SET NAMES utf8mb4 / PDO DSN charset=utf8mb4。
  4. 確保應用輸入/輸出編碼一致(HTML meta、PHP default_charset、數據庫連接)。
copyright © 萬盛學電腦網 all rights reserved