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

MySQL Incorrect string value 異常:utf8mb4 解決 4 字節字符存儲問題

     編輯:MySQL 資料庫相關知識

異常現場

Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...'

抓取新浪微博數據入庫拋出,異常字符為特殊佛經文字(4 字節 UTF-8)。

根因分析

  • MySQL utf8 字符集僅支援 1-3 字節 UTF-8 編碼(BMP 平面字符)
  • 4 字節字符(Emoji、生僻字、補充平面字符)無法存入 utf8 列
  • MySQL 5.5.3+ 引入 utf8mb4 真正支援完整 UTF-8(1-4 字節)

解決方案

方案一:修改列字符集(推薦)

ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

方案二:修改表默認字符集

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

方案三:修改庫默認字符集(影響新建表)

ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

完整鏈路配置

-- my.cnf [mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

-- JDBC 連接串
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4&characterSetResults=utf8mb4

版本兼容性提醒

  • MySQL < 5.5.3:不支援 utf8mb4,需升級或過濾 4 字節字符
  • MySQL 5.5.3 - 8.0:支援 utf8mb4,但 utf8 別名仍指向 3 字節版本
  • MySQL 8.0+:utf8mb4 為默認字符集,utf8 保留為別名

排查清單

  1. 確認 MySQL 版本 ≥ 5.5.3
  2. 庫/表/列字符集均為 utf8mb4
  3. 連接字符集設置為 utf8mb4
  4. 應用層無硬編碼截斷/轉碼邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved