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

Emoji 表情存入 MySQL 報錯「Incorrect string value」完整解決方案

     編輯:MySQL 綜合教學

Emoji 表情存入 MySQL 報錯「Incorrect string value」完整解決方案

報錯現象

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1

原因:Emoji 為 4 字節 UTF-8 字符(Unicode 輔助平面),MySQL utf8 僅支援 3 字節,導致寫入失敗。

徹底解決步驟(MySQL 5.5.3+)

  1. 修改表字段字符集
    ALTER TABLE UGC_REVIEW_CONTENT MODIFY `CONTENT` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. 修改表默認字符集
    ALTER TABLE UGC_REVIEW_CONTENT CHARSET = utf8mb4;
  3. 修改庫級字符集
    ALTER DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
  4. 配置服務器參數 (my.cnf)
    [mysqld]
    character-set-server = utf8mb4
    init_connect = 'SET NAMES utf8mb4'
    
    [client]
    default-character-set = utf8mb4
  5. 重啟 MySQL
    systemctl restart mysqld
  6. 驗證
    SHOW VARIABLES LIKE 'character_set_%';
    -- 關鍵項均為 utf8mb4 即成功

原理總結

  • utf8mb4 是真正的 UTF-8,支援 4 字節字符(Emoji、生僻字)
  • MySQL 5.5.3 起引入,主從版本需一致,否則復制報錯
  • 連接層也需 SET NAMES utf8mb4(JDBC URL 加 characterEncoding=utf8mb4)

避坑指南

  • 僅修改字段/表不修改 my.cnf 會導致新連接仍用 utf8,插入仍報錯
  • 舊表數據若含 4 字節字符,ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 會自動轉碼
  • 索引長度限制:utf8mb4 單字符 4 字節,聯合索引長度可能超限,需縮短前綴長度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved