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

MySQL 字符集升級指南:將字段編碼從 utf8 遷移至 utf8mb4

     編輯:MySQL 綜合教學

MySQL 字符集升級指南:將字段編碼從 utf8 遷移至 utf8mb4

MySQL 的 utf8 僅支援 BMP 平面(最多 3 字節),無法存儲 Emoji、生僻字等 4 字節字符。本文給出生產環境無停機遷移至 utf8mb4 的標準化操作步驟。

為什麼要遷移?

  • utf8mb4 真正實現 UTF-8,支援 4 字節字符
  • 避免「Incorrect string value」報錯導致寫入失敗
  • 符合現代應用國際化需求

單字段修改示例

ALTER TABLE c_comment 
MODIFY COLUMN content VARCHAR(100) 
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;

整表/整庫遷移標準流程

  1. 備份:mysqldump --default-character-set=utf8mb4 ...
  2. 修改庫級默認:
    ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
  3. 修改表級默認:
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    CONVERT TO 會同時轉換表默認字符集與所有字符列定義。

  4. 調整列長度(必要時):utf8mb4 最大 4 字節/字符,VARCHAR(255) 仍安全,但 CHAR(255) 可能超過行大小限制(65535 字節),需評估縮短或改 VARCHAR/TEXT。
  5. 驗證:
    SHOW CREATE TABLE tbl_name\G
    -- 檢查 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
    INSERT TEST VALUES ('😀🎉'); -- 驗證 4 字節寫入

排序規則選擇建議

Collation特點適用場景
utf8mb4_unicode_ci基於 UCA 標準,多語言排序準確通用推薦
utf8mb4_general_ci舊版簡化排序,速度略快但準確性較低舊系統兼容
utf8mb4_0900_ai_ciMySQL 8.0+ 預設,支援 ICU、加權排序8.0+ 新項目首選

關聯配置同步修改

-- my.cnf / my.ini
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake

重啟服務生效,或動態設置:SET NAMES utf8mb4;(僅當前會話)。

常見坑點提醒

  • 索引長度限制:utf8mb4 下單列索引前綴長度從 767 字節 → 3072 字節(需 innodb_large_prefix=ON + ROW_FORMAT=DYNAMIC/COMPRESSED)
  • 外鍵關聯表必須同步轉換字符集,否則報錯
  • 應用端連接字符串添加 characterEncoding=utf8mb4(JDBC)或 charset=utf8mb4(Python/PHP)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved