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

MySQL 命令列還原 phpMyAdmin 匯出含中文 SQL 檔案:編碼識別關鍵步驟、SET NAMES utf8 實測與 MySQL-Front 驗證

     編輯:MySQL 資料庫相關知識

接手數十 MB 的 MySQL 腳本檔,phpMyAdmin 匯入易逾時。本文實測流程:MySQL-Front 建立空庫 → 命令列 mysql 客戶端還原,**關鍵在於識別 SQL 檔案真實編碼並對應設定 SET NAMES**,否則中文全亂碼。

實測步驟

1. MySQL-Front 建立空資料庫 (指定字元集)

觀察腳本含 DEFAULT CHARSET=gbk,但**不可輕信**,仍需驗證檔案實際編碼。

2. 啟動命令列 mysql 客戶端

mysql -u root -p
-- 輸入密碼進入 mysql>

3. 選擇目標資料庫

USE target_db;

4. 關鍵:識別 SQL 檔案真實編碼

  • 用 **VS Code / Notepad++ / VS.NET IDE** 開啟 .sql 檔。
  • 查看編碼標示:**UTF-8** (無 BOM) / GBK / Big5 等。
  • 本案例實測為 **UTF-8**。

5. 設定對應連線字元集

SET NAMES utf8;  -- 注意:utf8 不含連字號,非 utf-8

6. 執行還原

SOURCE /path/to/backup.sql;

7. 驗證結果

MySQL-Front 開啟資料表,中文欄位正常顯示,無亂碼。

編碼設定對照表

SQL 檔案實際編碼mysql> 設定指令常見誤區
UTF-8 (無 BOM)SET NAMES utf8;設定 SET NAMES utf-8 (錯誤)、SET CHARACTER SET utf8 (不完整)
GBKSET NAMES gbk;同上
Big5SET NAMES big5;同上
UTF-8 with BOMSET NAMES utf8; (需先移除 BOM)BOM 導致首行語法錯誤

原理解析

  • SET NAMES utf8 等同於同時設定三個系統變數:
    SET character_set_client = utf8;
    SET character_set_connection = utf8;
    SET character_set_results = utf8;
  • 客戶端讀取檔案位元組 → 依 character_set_client 解碼 → 伺服器依 character_set_connection 處理 → 儲存依表/欄位字元集 (必要時轉換)。
  • 若設定與檔案實際編碼不符,位元組序列會被錯誤解碼,產生亂碼或截斷。

大檔案還原優化

-- 在 SOURCE 前執行 (需 SUPER 權限)
SET SESSION sql_log_bin = 0;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;

SOURCE /path/backup.sql;

SET FOREIGN_KEY_CHECKS = 1;
SET UNIQUE_CHECKS = 1;
SET AUTOCOMMIT = 1;
-- 最後 COMMIT;
COMMIT;

避坑檢核

  • [ ] **用編輯器確認檔案編碼**,勿信腳本內 DEFAULT CHARSET= 宣告。
  • [ ] SET NAMES 值**不含連字號** (utf8 非 utf-8)。
  • [ ] 檔案含 BOM 需先移除 (VS Code: Save with Encoding → UTF-8 without BOM)。
  • [ ] 大檔案關閉 binlog/外鍵/唯一檢查/自動提交,提速 3-5 倍。
  • [ ] 還原後 COMMIT 並驗證關鍵表筆數與中文欄位。

「編碼識別正確、SET NAMES 對應、大檔優化參數」三步走,命令列還原 phpMyAdmin 匯出檔案,穩定、高效、零亂碼。

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