無需寫任何程式碼,利用 Navicat 圖形化工具即可完成 Excel/CSV 與 MySQL 資料表的雙向轉換。本文以實戰截圖步驟詳細講解編碼處理、欄位映射、常見坑點與最佳實踐。
SHOW CREATE DATABASE db_name; 查看 CHARACTER SET。utf8mb4,支援完整 Unicode(含 Emoji)。檔案 → 另存為 → CSV UTF-8 (逗號分隔) (*.csv)。另存為 → 編碼選 UTF-8。1(CSV 第一行為標題)。2(從第二行開始為資料)。| 現象 | 原因 | 解決 |
|---|---|---|
| 中文亂碼 | 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」 |
ALTER TABLE t DISABLE KEYS(MyISAM)或暫時刪除二級索引/外鍵,導入後重建。LOAD DATA LOCAL INFILE,效能遠優於 INSERT。確保 local_infile=1。若需定時/高頻同步,建議改用程式化方案:
# 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。根據場景選擇合適工具,才能事半功倍。