萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 導出 CSV 格式數據文件完整方法大全

MySQL 導出 CSV 格式數據:三大方法完整對比與實戰參數

CSV 是數據交換最通用格式。本文匯總 MySQL 導出 CSV 的三種主流方法:LOAD DATA 反向思路、命令行管道、mysqldump 專用參數,並給出生產級參數模板。

方法一:SELECT ... INTO OUTFILE (服務端生成)

SELECT * FROM table_name
INTO OUTFILE '/tmp/export.csv'
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

關鍵參數解析

  • FIELDS TERMINATED BY ',':字段分隔符
  • OPTIONALLY ENCLOSED BY '"'":僅字符串類型加雙引號包裹
  • ESCAPED BY '"'":雙引號轉義為雙雙引號 (CSV 標準)
  • LINES TERMINATED BY '\r\n':Windows 換行兼容

限制

  • 需 FILE 權限
  • 文件在服務器端生成
  • 目標文件不能預先存在

方法二:命令行管道導出 (客戶端獲取)

# 基礎導出 (制表符分隔)
mysql -h host -u user -p -D db -e "SELECT * FROM t" > export.tsv

# CSV 格式化 (sed 處理)
mysql -h host -u user -p -D db -ss -e "SELECT * FROM t LIMIT 300" \
  | sed 's/\t/","/g; s/^/"/; s/$/"/; s/\n//g' > export.csv

sed 命令解析

  • s/\t/","/g:制表符 → ","
  • s/^/"/:行首加 "
  • s/$/"/:行尾加 "
  • s/\n//g:移除換行 (配合 -ss 無表頭)
⚠️ 中文數據慎用 sed
含中文時 sed 處理易導致編碼損壞,推薦用 Python/PHP 腳本或方法三。

方法三:mysqldump 專用 CSV 參數 (推薦生產)

mysqldump -u root -p -t -T /export_dir db_name \
  --fields-terminated-by=',' \
  --fields-enclosed-by='"' \
  --fields-escaped-by='"' \
  --lines-terminated-by='\r\n' \
  --no-create-info

參數詳解

參數說明
-t / --no-create-info不導出建表語句,僅數據
-T / --tab輸出目錄 (服務端),生成 .txt 數據文件 + .sql 結構文件
--fields-terminated-by字段分隔符
--fields-enclosed-by字段包裹字符
--fields-escaped-by轉義字符
--lines-terminated-by行結束符
--where導出條件過濾

輸出示例

"1","m11401","2013-06-22 23:00:01"
"2","m11402","2013-06-22 23:00:02"
"3","m11403","2013-06-22 23:00:03"

帶條件導出實戰

# 導出特定條件數據
mysqldump -h host -u user -p db_name table_name \
  -w "id < 300 AND status = 1" \
  -t -T /export_dir \
  --fields-terminated-by=',' \
  --fields-enclosed-by='"' \
  --lines-terminated-by='\r\n'

編碼處理最佳實踐

# 1. 明確指定連接字符集
mysql --default-character-set=utf8mb4 ...

# 2. 導出後驗證編碼
file export.csv
# 輸出: UTF-8 Unicode text, with CRLF line terminators

# 3. Excel 打開無亂碼技巧
# 在 CSV 首行添加 BOM (EF BB BF) 或用 Excel「數據 → 從文本/CSV」導入指定 UTF-8

大數據量導出優化

  • 分批導出:--where "id BETWEEN 1 AND 100000" 循環
  • 並行導出:多表/多分區並行
  • 壓縮輸出:管道 | gzip > export.csv.gz
  • 避開業務高峰,設置 --max-allowed-packet=1G

方法對比總結

方法執行端權限需求中文支持自動化適用場景
INTO OUTFILEServerFILE 權限優良服務器本地存儲、定時任務
命令行管道ClientSELECT 權限差 (sed 易亂碼)良臨時導出、無 FILE 權限
mysqldump -TServerFILE 權限優優生產標準化導出、跨系統交換
copyright © 萬盛學電腦網 all rights reserved