首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Excel 與 MySQL 資料互轉零代碼實戰:Navicat 導入導出全流程圖解

     編輯:MySQL 綜合教學

Excel 與 MySQL 資料互轉零代碼實戰

無需寫任何程式碼,利用 Navicat 圖形化工具即可完成 Excel/CSV 與 MySQL 資料表的雙向轉換。本文以實戰截圖步驟詳細講解編碼處理、欄位映射、常見坑點與最佳實踐。

一、Excel → MySQL 導入全流程

步驟 1:確認目標資料庫編碼

  • 執行 SHOW CREATE DATABASE db_name; 查看 CHARACTER SET。
  • 建議統一使用 utf8mb4,支援完整 Unicode(含 Emoji)。

步驟 2:Excel 標準化整理

  • 第一行必須為欄位名(Header),與資料表欄位一一對應。
  • 無合併儲存格、無空行、資料類型一致(日期統一格式、數字無千分位逗號)。
  • 另存為 CSV (UTF-8) 格式:檔案 → 另存為 → CSV UTF-8 (逗號分隔) (*.csv)。

步驟 3:CSV 編碼二次確認(關鍵)

  • 用編輯器(VS Code、Sublime、Notepad++)開啟 CSV。
  • 確認右下角編碼顯示 UTF-8(或 UTF-8 with BOM)。
  • 若為 ANSI/GBK,執行 另存為 → 編碼選 UTF-8。

步驟 4:Navicat 導入操作

  1. 右鍵目標表 → 導入嚮導(或工具列「導入」按鈕)。
  2. 格式選 CSV,選擇檔案路徑。
  3. 編碼選 UTF-8,分隔符號 逗號,引號字元 雙引號。
  4. 欄位名行:設為 1(CSV 第一行為標題)。
  5. 第一筆資料行:設為 2(從第二行開始為資料)。
  6. 目標表:選擇對應資料表。
  7. 欄位映射:左側 CSV 欄位拖曳至右側資料表欄位,確認型別相容。
  8. 點擊「開始」執行導入,查看成功/失敗筆數統計。

二、MySQL → Excel 導出全流程

  1. 開啟目標表/視圖/查詢結果。
  2. 工具列點擊 導出(或右鍵 → 導出)。
  3. 格式選 Excel (*.xlsx) 或 CSV。
  4. 編碼建議 UTF-8(Excel 2016+ 完美支援),或 UTF-8 with BOM 避免 Excel 自動誤判編碼。
  5. 選擇匯出範圍:全部資料 / 當前頁面 / 選取行。
  6. 可勾選「包含欄位名」、「建立資料表結構」等選項。
  7. 指定儲存路徑,完成導出。

三、常見坑點與解決方案

現象原因解決
中文亂碼CSV 編碼非 UTF-8,或導入時編碼選錯全鏈路 UTF-8:Excel 存 CSV UTF-8 → 編輯器確認 UTF-8 → Navicat 導入選 UTF-8
日期欄位變成數字/錯誤Excel 日期格式與 MySQL 不兼容Excel 中將日期欄位設為「文字」格式,或統一為 YYYY-MM-DD HH:MM:SS 純文字
大數字科學計數法 (1.23E+10)Excel 自動轉換長數字Excel 中設為「文字」格式,或導入前在 CSV 中檢查
導入失敗:Duplicate entry主鍵/唯一索引衝突清理重複資料、或使用 INSERT IGNORE/REPLACE 模式(Navicat 導入選項中可配置)
導入失敗:Data truncated資料長度超過欄位定義擴大欄位長度、或截斷資料
NULL 值導入變成空字串CSV 空值處理CSV 中留空(無引號),Navicat 映射時勾選「空值轉 NULL」

四、大數據量導入優化建議

  • 分批導入:單檔超過 10 萬行建議拆分多個 CSV,分批導入避免記憶體/鎖表問題。
  • 關閉索引/外鍵:導入前 ALTER TABLE t DISABLE KEYS(MyISAM)或暫時刪除二級索引/外鍵,導入後重建。
  • 使用 LOAD DATA:Navicat 底層呼叫 LOAD DATA LOCAL INFILE,效能遠優於 INSERT。確保 local_infile=1。
  • 事務批次:InnoDB 導入大量資料時,可在導入選項中調整「每 N 行提交一次」,平衡效能與回滾風險。

五、進階:自動化腳本替代手工

若需定時/高頻同步,建議改用程式化方案:

# Python + pandas + sqlalchemy 範例
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://user:pass@host/db?charset=utf8mb4')
df = pd.read_excel('data.xlsx', dtype=str)  # 全讀為字串避免型別推導錯誤
df.to_sql('target_table', engine, if_exists='append', index=False, chunksize=5000)

Navicat 圖形化導入導出適合臨時、中小量、一次性資料遷移;自動化腳本適合定時、大量、生產級 ETL。根據場景選擇合適工具,才能事半功倍。

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