首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL "Incorrect string value" 中文亂碼問題:從 GB2312 遷移至 GBK/UTF8MB4

     編輯:MySQL 資料庫相關知識

錯誤根因分析

錯誤 Incorrect string value: '\\xA9\\xC1...' for column 'pdetails' 發生原因:

  • 資料庫/表/欄位字符集為 gb2312(僅支援 6,763 個漢字)
  • 用戶輸入包含 GBK 擴展字符(如 ㈠、㊣、︵︶ 等特殊符號)
  • PHP 連線雖設 SET NAMES gb2312,但資料層面仍無法存儲超集字符

徹底解決方案

方案一:修改欄位字符集為 GBK(快速修復)

ALTER TABLE `your_table` 
MODIFY `pdetails` TEXT CHARACTER SET gbk COLLATE gbk_chinese_ci;

方案二:全庫遷移至 UTF8MB4(推薦長久方案)

-- 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"]);

字符集對照表

字符集支援字符最大長度適用場景
gb23126,763 漢字2 bytes舊系統維護
gbk21,003 字符2 bytes繁簡中文混雜
utf8mb3BMP 平面3 bytes舊版 UTF-8
utf8mb4全 Unicode4 bytes現代應用首選

驗證步驟

  1. 插入測試字符:INSERT INTO t(c) VALUES ('㈠㊣😀');
  2. 查詢確認:SELECT c, HEX(c), CHAR_LENGTH(c) FROM t;
  3. 檢查連線變數:SHOW VARIABLES LIKE 'character_set%';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved