首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 1366 錯誤:字符集衝突導致插入異常的完整解決方案

     編輯:MySQL 綜合教學

MySQL 1366 錯誤:字符集衝突導致插入異常的完整解決方案

異常現象

java.sql.SQLException: Incorrect string value: '\xE7\xAE...' for column 'description' at row 1
Error Code: 1366

根本原因

插入數據的編碼(如 UTF-8)與資料表欄位字符集(如 latin1)不一致。UTF-8 中文佔 3 字節,latin1 單字節只能存 1 字節,導致數據截斷、無法寫入。

排查步驟

  1. 查看資料庫支持的字符集:SHOW CHARACTER SET; 關注 Maxlen 欄位
  2. 檢查目標表欄位字符集:SHOW FULL COLUMNS FROM table_name; 查看 Collation 欄位
  3. 確認連接層字符集:SHOW VARIABLES LIKE 'character_set_%';

解決方案

方案一:修改資料庫/表/欄位字符集(推薦徹底解決)

-- 修改資料庫預設字符集
ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改表預設字符集(僅影響後續新增欄位)
ALTER TABLE tbl_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改現有欄位字符集(會轉換數據)
ALTER TABLE tbl_name MODIFY col_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 或一步到位轉換整表
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

方案二:修改 MySQL 配置文件(需重啟服務)

Windows (my.ini):

[client]
default-character-set = utf8mb4

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

Linux (my.cnf):

[client]
default-character-set = utf8mb4

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

注意:MySQL 5.5+ 廢棄 default-character-set,必須用 character-set-server。修改後需重啟服務,且現有庫表需重建或轉換。

方案三:連接層臨時設置(程式碼中每次連接執行)

-- SQL
SET NAMES utf8mb4;

-- Java JDBC URL
jdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useSSL=false

-- Python MySQLdb
conn = MySQLdb.connect(charset='utf8mb4')

補充知識:字符集、編碼、字符序

  • 字符:人類語言最小表義符號(如 'A'、'中')
  • 編碼:字符對應的數值(如 'A' → 65)
  • 字符集:字符與編碼的映射集合
  • 字符序:同一字符集內的比較規則(如 utf8mb4_general_ci 不分大小寫,_bin 按二進制比較)

MySQL 關鍵字符集系統變數

變數作用
character_set_server服務器內部操作預設字符集
character_set_client客戶端發送數據的字符集
character_set_connection連接層字符集(服務器將客戶端數據轉換為此字符集)
character_set_results查詢結果返回給客戶端的字符集
character_set_database當前選中資料庫的預設字符集
character_set_system系統元數據(欄位名等)字符集,固定 utf8

最佳實踐建議

  1. 新專案統一使用 utf8mb4(支援 Emoji、完整 Unicode)
  2. 資料庫、表、欄位、連接層全鏈路保持一致
  3. JDBC URL 顯式指定 characterEncoding=utf8mb4
  4. 避免使用 latin1 存儲多語言數據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved