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

MySQL 字符集修改與查看全指南:庫、表、列三級操作與編碼避坑

     編輯:MySQL 綜合教學

MySQL 字符集修改與查看全指南:庫、表、列三級操作與編碼避坑

字符集不一致是亂碼、索引失效、排序錯誤的高發區。本文系統整理庫/表/列三級字符集查看與修改命令,含 utf8/utf8mb4 選型建議與避坑指南。

一、查看字符集命令

對象命令關鍵輸出
數據庫SHOW CREATE DATABASE db_name;DEFAULT CHARACTER SET utf8mb4
表SHOW CREATE TABLE tbl_name;DEFAULT CHARSET=utf8mb4
列SHOW FULL COLUMNS FROM tbl_name;Collation: utf8mb4_general_ci
系統級SHOW VARIABLES LIKE 'character_set_%';server/database/client/connection/results 等

二、修改字符集命令(三級)

1. 數據庫級(僅影響後續新建表)

-- 模式 A:僅修改表默認字符集(新列生效),不轉換現有列
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 模式 B:轉換表中所有字符列(CHAR/VARCHAR/TEXT)至新字符集(含數據重寫)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

生產環境必用模式 B,否則新舊列字符集混用導致隱式轉換、索引失效。

3. 列級(精確控制單列)

特性utf8 (utf8mb3)utf8mb4

最大字節/字符3 字節4 字節
支持字符範圍BMP 基本多文種平面(無 Emoji、生僻漢字)完整 Unicode(含 Emoji、生僻字、補充平面)
索引長度限制767 字節(InnoDB 紅線)767 字節(5.7.7+ 可配置 3072)
推薦度❌ 棄用✅ **新項目強制、舊項目遷移**


遷移建議:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;(8.0+ 推薦排序規則,支援加權排序)。

四、排序規則選型

  • _general_ci:通用、速度快、不精準(如 ß=ss、œ=oe)。
  • _unicode_ci / _0900_ai_ci:UCA 標準、精準、稍慢,**業務推薦**。
  • _bin:二進制比較、區分大小寫/重音、用於精確匹配/密碼列。

五、避坑清單

  1. ❌ 僅改庫/表默認字符集,不轉換現有列 → 隱式轉換導致索引失效、查詢慢。
  2. ❌ 表級用 DEFAULT CHARACTER SET 以為轉換了數據 → 實際未動數據。
  3. ❌ 列長度未評估:VARCHAR(255) utf8mb4 最大 1020 字節,超 767 字節無法建唯一索引(需 innodb_large_prefix=ON + ROW_FORMAT=DYNAMIC/COMPRESSED)。
  4. ❌ 連接字符集未設:應用端 SET NAMES utf8mb4 / JDBC URL characterEncoding=utf-8,否則存入亂碼。
  5. ✅ 統一全鏈路:DB/表/列/連接/應用/前端 全鏈路 utf8mb4。

六、一鍵遷移腳本思路(生產慎用,先測試)

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