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

MySQL 修改資料庫與表字符集為 UTF-8 的正確姿勢

     編輯:MySQL 資料庫相關知識

字符集不匹配導致中文亂碼是經典坑。本文梳理從庫級到表級、列級的完整修改流程。

1. 查看當前字符集

SHOW VARIABLES LIKE 'character%';

重點關注:character_set_database、character_set_server、character_set_client/connection/results。

2. 修改資料庫預設字符集(僅影響後建表)

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

3. 修改現有表字符集(含數據轉換)

-- 僅修改表預設字符集(不轉換現有列數據)
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 連同所有字符列一起轉換(推薦)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

CONVERT TO 會重建表,將所有 CHAR/VARCHAR/TEXT 列按新字符集重新編碼,耗時與表大小成正比,大表請低峰期操作。

4. 修改單列字符集

ALTER TABLE tbl_name MODIFY col_name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

5. 配置文件固化(my.cnf)

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET NAMES utf8'  # 讓連接默認用 utf8

重啟 MySQL 生效。

6. 連接層面確認

應用連接串或代碼中顯式設定:

  • JDBC:?characterEncoding=utf8&useSSL=false
  • PHP PDO:charset=utf8 DSN 參數
  • Python PyMySQL:charset='utf8'

避坑提醒

  1. utf8 vs utf8mb4:MySQL 5.5.3+ 建議用 utf8mb4 支援 Emoji/生僻字,utf8 實為 utf8mb3。
  2. 修改字符集前必備份,CONVERT TO 若中斷可能損壞數據。
  3. 檢查應用層是否硬編碼 SET NAMES latin1 覆蓋配置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved