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

解決 MySQL 無法插入中文:Incorrect string value 錯誤完整指南

     編輯:MySQL 資料庫相關知識

錯誤現象

INSERT INTO a_table VALUES('北京');
-- ERROR 1366 (HY000): Incorrect string value: '\xB1\xB1\xBE\xA9' for column 'b' at row 1

根本原因

  1. 資料庫/表/欄位字元集非 UTF-8(如 latin1、gbk),無法儲存中文編碼。
  2. 客戶端連線字元集未設定,導致傳輸編碼錯誤。
  3. SQL 檔案本身編碼非 UTF-8(如 ANSI/GB2312),批次執行時亂碼。

完整解決步驟

1. 設定伺服器預設字元集

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

修改 my.cnf 後 必須重啟 MySQL。

2. 建庫建表指定字元集

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(100)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. 修正既有表欄位字元集

ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 或單欄位
ALTER TABLE t MODIFY c VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4. 連線時設定字元集(關鍵)

PHP (mysqli/PDO):

$mysqli->set_charset('utf8mb4');
// 或 PDO DSN
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', $user, $pass);

命令列:

mysql --default-character-set=utf8mb4 -u root -p

5. SQL 檔案儲存為 UTF-8 無 BOM

  • Notepad++:編碼 → 轉為 UTF-8(無 BOM)。
  • VS Code:右下角編碼選 UTF-8。
  • Linux:iconv -f GBK -t UTF-8 old.sql > new.sql

驗證清單

  1. SHOW VARIABLES LIKE 'character_set%'; 全部為 utf8mb4。
  2. SHOW CREATE TABLE t; 表/欄位 CHARSET=utf8mb4。
  3. 連線後執行 SET NAMES utf8mb4; 再插入中文測試。

常見誤區

誤區正確觀念
只改資料庫字元集表、欄位、連線都要一致
用 utf8 而非 utf8mb4utf8 僅支援 BMP,無法儲存 Emoji/生僻字,必須用 utf8mb4
以為 SET NAMES 就夠了伺服器/表/欄位字元集不匹配仍會報錯

徹底統一字元集為 utf8mb4,即可永久解決中文插入亂碼與 Incorrect string value 錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved