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 OUTFILE | Server | FILE 權限 | 優 | 良 | 服務器本地存儲、定時任務 |
| 命令行管道 | Client | SELECT 權限 | 差 (sed 易亂碼) | 良 | 臨時導出、無 FILE 權限 |
| mysqldump -T | Server | FILE 權限 | 優 | 優 | 生產標準化導出、跨系統交換 |