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

MySQL 匯出 CSV 完全指南:命令列、LOAD DATA 與 phpMyAdmin 三種實戰方式

     編輯:MySQL 資料庫相關知識

CSV 作為通用資料交換格式,MySQL 匯出入 CSV 是高頻運維操作。本文整理三種主流方式,涵蓋權限需求、效能特性與避坑細節,助您按場景選型。

方式一:SELECT ... INTO OUTFILE(需 FILE 權限,效能最強)

匯出語法

SELECT * FROM `test_info`
INTO OUTFILE '/tmp/test.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
  • 需求: 執行帳號具備 FILE 權限,MySQL 服務進程對目標目錄有寫入權限。
  • secure_file_priv 限制: MySQL 5.7+ 預設僅允許匯出至 secure_file_priv 指定目錄(查詢 SHOW VARIABLES LIKE 'secure_file_priv';)。
  • 檔案不得存在: 目標檔案若已存在會報錯,需先刪除或更換檔名。

匯入語法

LOAD DATA INFILE '/tmp/test.csv'
INTO TABLE `test_info`
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;  -- 若 CSV 含標題列
  • 同樣受 secure_file_priv 與 FILE 權限限制。
  • LOCAL 關鍵字:LOAD DATA LOCAL INFILE 讓客戶端讀取檔案並傳送給伺服器,繞過伺服器端檔案權限,但需客戶端與伺服器均啟用 local_infile=1。

方式二:mysqldump 輸出 CSV 格式(無 FILE 權限限制,適合遠端)

mysqldump -u root -p --tab=/tmp --fields-terminated-by=',' \
  --fields-enclosed-by='"' --fields-escaped-by='"' \
  --lines-terminated-by='\r\n' --no-create-info \
  db_name table_name
  • --tab 輸出兩檔:.txt(資料)、.sql(建表語句)。
  • --no-create-info 僅輸出資料。
  • 輸出目錄同樣受 secure_file_priv 限制。

方式三:phpMyAdmin 圖形化匯出(零門檻、適合中小表)

  1. 進入 phpMyAdmin → 選擇資料庫/資料表 → 「匯出」分頁。
  2. 格式選「CSV」或「CSV for Excel」。
  3. 「輸出」區塊勾選「輸出到檔案」,可選壓縮(zip/gzip)。
  4. 「格式特定選項」可自訂欄位分隔符、跳脫字元、編碼(建議 UTF-8)。
  5. 點擊「執行」下載。

優勢: 無需命令列權限、支援瀏覽器直接下載、視覺化選項豐富。
劣勢: 受 PHP memory_limit、max_execution_time、upload_max_filesize 限制,**超過 10-50 萬筆易逾時/記憶體溢位**。

進階技巧與避坑指南

場景解決方案
大表分卷匯出配合 WHERE id BETWEEN ... AND ... 分批 INTO OUTFILE,再合併檔案
指定欄位順序/別名SELECT col1 AS 'Column1', col2 ... INTO OUTFILE ...
處理 NULL 值FIELDS ESCAPED BY '\\' NULL AS 'NULL' 或應用層 COALESCE(col, '')
編碼轉換(UTF-8 → Big5)匯出後用 iconv -f utf8 -t big5 test.csv > test_big5.csv
Windows 換行符LINES TERMINATED BY '\r\n'(匯出)、匯入時同樣指定
CSV 含逗號/引號OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' 標準 RFC 4180 格式

效能基準參考(單表 100 萬筆、~200MB)

方式耗時CPU/記憶體適用規模
INTO OUTFILE~8 秒低/低億級以上
mysqldump --tab~12 秒中/低千萬級
phpMyAdmin~45 秒 + 下載高/高百萬級以下

最佳實踐建議

  • 自動化備份/ETL: 採用 INTO OUTFILE + 定時腳本,配合 secure_file_priv 專用目錄。
  • 跨伺服器遷移: mysqldump --tab 或 LOAD DATA LOCAL INFILE 避開檔案權限。
  • 臨時人工操作: phpMyAdmin 最便捷。
  • 資料驗證: 匯入後執行 SELECT COUNT(*)、關鍵欄位 SUM/MAX/MIN 對比來源,確保無損。

掌握三種方式優劣,依權限、資料量、自動化需求靈活切換,讓 MySQL CSV 匯出入不再是阻礙。

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