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

MySQL source 命令導入亂碼問題完整解決方案

     編輯:MySQL 資料庫相關知識

問題場景

在將 Windows 環境導出的 SQL 檔案導入 Linux (Ubuntu/CentOS) MySQL 時,中文內容出現亂碼。這是典型的字符集不匹配問題。

根本原因

  • 導出時未指定字符集,預設使用系統編碼 (Windows 通常為 GBK/CP936)
  • 導入時未指定字符集,MySQL 預設使用 utf8mb4 解析
  • 編碼不一致導致中文解析錯誤

解決方案:統一指定 UTF-8 編碼

步驟 1:導出時指定字符集

# Windows 環境
mysqldump -u root -p --default-character-set=utf8mb4 資料庫名稱 > backup.sql

# Linux 環境
mysqldump -u root -p --default-character-set=utf8mb4 資料庫名稱 > /path/backup.sql

步驟 2:導入時指定字符集

# 進入 MySQL 客戶端並指定編碼
mysql -u root -p --default-character-set=utf8mb4

# 在 MySQL 內部執行
USE 資料庫名稱;
SOURCE /path/backup.sql;

進階:避免常見陷阱

檢查資料庫/表/欄位實際編碼

-- 查看資料庫編碼
SHOW CREATE DATABASE 資料庫名稱;

-- 查看表編碼
SHOW CREATE TABLE 表名稱;

-- 查看欄位編碼
SHOW FULL COLUMNS FROM 表名稱;

修正錯誤編碼的表

-- 轉換表編碼 (會重建表,大表慎用)
ALTER TABLE 表名稱 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 僅修改表預設編碼 (不影響現有欄位)
ALTER TABLE 表名稱 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

驗證導入結果

SELECT * FROM 表名稱 WHERE 中文欄位 LIKE '%測試%';
-- 若能正常查詢並顯示中文,則導入成功

最佳實踐清單

  1. 全鏈路統一 utf8mb4:資料庫、表、欄位、連線、導出導入全部指定 utf8mb4
  2. 避免使用 utf8:MySQL 的 utf8 僅支援 3 字節字符,無法儲存 Emoji 和部分生僻字
  3. 配置檔固化設定:在 my.cnf/[mysqld] 區段加入 character-set-server=utf8mb4
  4. 連線字符集:應用程式連線時執行 SET NAMES utf8mb4

故障排查快速參考

現象可能原因解決方法
導入後中文變 ??? 導出編碼非 UTF-8重新導出並指定 --default-character-set=utf8mb4
導入報錯 "Incorrect string value"目標表編碼不支援該字符ALTER TABLE CONVERT TO utf8mb4
source 導入卡住無反應大檔案超過 max_allowed_packet調大 max_allowed_packet 或分檔導入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved