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

Linux 下 MySQL 字符集修改完整手冊:配置檔、運行時、庫表遷移三大場景

     編輯:MySQL 資料庫相關知識

配置檔定位與編輯

# 1. 尋找預設配置模板
find / -name 'my*.cnf' -type f

# 常見路徑
/usr/share/mysql/my-*.cnf
/etc/my.cnf

# 2. 複製適配模板
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

# 3. 編輯關鍵區段
vi /etc/my.cnf

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET NAMES utf8'

重啟驗證

systemctl restart mysqld
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%';"

預期:client/connection/database/results/server = utf8,system = utf8,filesystem = binary,collation_* = utf8_general_ci。

三大修改場景對照表

場景操作生效範圍是否需重啟
全新安裝/全域預設修改 my.cnf [mysqld] 區段新建庫/表/連線是
現有庫遷移ALTER DATABASE db CHARSET=utf8該庫新建表否
現有表遷移ALTER TABLE t CONVERT TO CHARSET utf8該表現有欄位+新欄位否(但鎖表)
僅修改表預設ALTER TABLE t CHARSET=utf8該表新增欄位否
運行時連線SET NAMES utf8 / SET character_set_*=utf8當前會話否
db.opt 檔案編輯 /var/lib/mysql/db/db.opt該庫預設需重啟

運行時動態設定完整指令集

SET NAMES utf8;  -- 一鍵設定 client/connection/results

-- 或分別精確控制
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;   -- 需 SUPER 權限,僅影響後續新連線
SET character_set_system = utf8;   -- 唯讀,不可改

SET collation_connection = utf8_general_ci;
SET collation_database = utf8_general_ci;
SET collation_server = utf8_general_ci;  -- 需 SUPER

字符集與排序規則知識補充

  • 字符集:字符→位元組編碼映射(如 utf8、gbk、latin1)
  • 排序規則:字符比較/排序規則(如 utf8_general_ci 不區分大小寫、utf8_bin 二進位比較)
  • 四層級生效:Server → Database → Table → Column → Connection
  • 繼承鏈:編譯預設 → my.cnf → 啟動參數 → CREATE DATABASE → USE DATABASE → CREATE TABLE → 定義欄位

現代建議:utf8mb4 替代 utf8

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

ALTER DATABASE db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

理由:utf8 = utf8mb3 不支援 Emoji/生僻字;utf8mb4 完整 Unicode 支援,向下相容。

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