phpMyAdmin 直接匯入 Excel (.xls/.xlsx) 或 CSV 是將試算表資料導入 MySQL 最便捷的方式。關鍵在於 **第一列必須為欄位名**、**工作表名稱對應資料表名**、以及 **匯入選項勾選「忽略第一行」**。本文詳述步驟與常見失敗排查。
| 項目 | 規範 | 錯誤後果 |
|---|---|---|
| 第一列 | **必須為欄位名稱** (對應資料表欄位) | phpMyAdmin 會將 A、B、C 當作欄位名,產生 INSERT INTO ... (A,B,C) 錯誤 SQL |
| 工作表名稱 | **建議與目標資料表名稱相同** | 匯入時需手動對應,易出錯 |
| 資料型別 | Excel 格式與資料表定義一致 (日期、數值、文字) | 資料截斷、轉型失敗、預設值覆蓋 |
| 編碼 | 儲存為 UTF-8 CSV 或 .xlsx (phpMyAdmin 4.8+ 支援) | 中文亂碼 |
utf-8 / utf8mb4。, 或 ; (依實際檔案)。0 (預設遇錯停止),大量匯入可設 10 略過髒資料。

| 錯誤現象 | 原因 | 解決 |
|---|---|---|
#1054 - Unknown column 'A' in 'field list' | 未勾選忽略第一行,phpMyAdmin 把標題列當欄位名 | 勾選「第一行包含欄位名稱」或「忽略第一行」 |
#1062 - Duplicate entry 'xxx' for key 'PRIMARY' | 主鍵/唯一鍵衝突 | 清空目標表、或匯入前刪除衝突資料、或使用 REPLACE/INSERT IGNORE (需 SQL 格式) |
#1366 - Incorrect string value | 編碼不符 (Excel UTF-8, 表 latin1 / 反過來) | 統一 UTF-8/utf8mb4,CSV 用 Notepad++ 轉碼 |
日期欄位變 0000-00-00 | Excel 日期格式非 MySQL 識別格式 | Excel 設為 YYYY-MM-DD 文字格式,或匯入後 SQL UPDATE 轉換 |
| 大檔案逾時/記憶體不足 | phpMyAdmin PHP 限制 (upload_max_filesize, memory_limit, max_execution_time) | 分割檔案、改用 LOAD DATA INFILE / mysqlimport / ETL 工具 |
-- 1. CSV + LOAD DATA LOCAL INFILE (最快)
LOAD DATA LOCAL INFILE '/path/data.csv'
INTO TABLE target_tbl
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 LINES; -- 跳過標題列
-- 2. mysqlimport 命令列
mysqlimport --local -u root -p --ignore-lines=1 --fields-terminated-by=',' db_name /path/data.csv
-- 3. Python pandas + SQLAlchemy 批次寫入 (適合複雜轉換)
df.to_sql('target_tbl', engine, if_exists='append', index=False, chunksize=5000)