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

命令行導入 MySQL 出現亂碼終極解決:UTF-8 NO BOM + SET NAMES

     編輯:MySQL 資料庫相關知識

問題根因

SQL 文件編碼與客戶端連接字符集不一致,導致中文數據在傳輸/寫入過程中錯誤解碼。

三步解決法

1. SQL 文件頭部聲明字符集

在 SQL 文件第一行添加:

/*!40101 SET NAMES utf8 */;

/*!40101 ... */ 是 MySQL 版本條件註釋,4.0.1+ 版本會執行,舊版忽略,兼容性極佳。

2. 文件另存為 UTF-8 NO BOM 格式

  • Notepad++:編碼 → 轉為 UTF-8 (無 BOM)
  • VS Code:右下角編碼選 "UTF-8 without BOM" 保存
  • UltraEdit:文件 → 轉換 → UTF-8 無 BOM

關鍵:BOM (Byte Order Mark) 會導致 MySQL 解析首行報錯或亂碼。

3. 客戶端連接指定字符集

mysql -h 10.0.0.1 -u root -p123 --default-character-set=utf8 db_name < backup.sql

或在 SQL 文件內已包含 SET NAMES utf8 時,命令行可省略 --default-character-set。

定時任務自動導入(cPanel 環境)

  1. 上傳 backup.sql 至 public_html 或家目錄
  2. cPanel → Cron Jobs → Advanced (Unix Style)
  3. 時間設定:Minute/Hour/Day/Month 填具體時間,Weekday 填 *
  4. Command:
mysql -u cpanel_user -p'password' -h localhost cpanel_db < /home/cpanel_user/public_html/backup.sql

編碼不匹配對照表

文件編碼連接字符集結果
UTF-8SET NAMES utf8✅ 正常
GBK/ANSISET NAMES gbk✅ 正常
UTF-8SET NAMES gbk❌ 亂碼
GBKSET NAMES utf8❌ 亂碼

DOS 環境特別提醒

Windows 命令提示字元 (cmd) 預設代碼頁 936 (GBK),無法正確顯示 UTF-8 內容。僅影響顯示,不影響數據庫實際存儲。可用 chcp 65001 切換代碼頁或改用 PowerShell/Windows Terminal。

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