SELECT *
INTO OUTFILE '/tmp/export.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
FROM `table_name`;
權限要求:需 FILE 權限,目標目錄需受 secure_file_priv 限制 (查看:SHOW VARIABLES LIKE 'secure_file_priv';)。
LOAD DATA INFILE '/tmp/import.csv'
INTO TABLE `table_name`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n' -- Windows 生成文件常為 CRLF
IGNORE 1 LINES; -- 跳過標題行
| 場景 | 成因 | 解決方案 |
|---|---|---|
| 導出文件打開亂碼 | MySQL 按 utf8mb4 導出,Excel 默認用系統編碼 (GBK/ANSI) 打開 | 1. 用 文本編輯器 另存為 UTF-8 BOM 2. Excel 數據 → 從文本/CSV → 選 UTF-8 編碼導入 3. 導出時指定 CHARACTER SET gbk (不推薦,有字符集損失) |
| 導入數據庫存入亂碼 | 文件編碼與表/連接字符集不一致 | 1. 確保文件為 UTF-8 無 BOM 2. 會話執行 SET NAMES utf8mb4;3. 表欄位為 utf8mb4 4. 配置文件全鏈路 utf8mb4 (見專題文章) |
| 字段包含逗號/換行/引號 | 未正確處理轉義與包圍 | 必须使用 OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"',且程序生成 CSV 時按 RFC 4180 標準雙引號轉義 |
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
secure_file_priv = /data/mysql_files/ # 統一導入導出目錄,便於管理與安全審計
systemctl restart mysqld
SELECT ... WHERE id BETWEEN 1 AND 100000 INTO OUTFILE ... 循環分批,避免單文件過大導致磁碟/傳輸問題。LOAD DATA,配合 SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET AUTOCOMMIT=0; 批量提交,導入後恢復檢查。gzip export.csv,跨機房傳輸解壓再導入。FILE 權限與服務端目錄權限,需客戶端與服務端均啟用 local_infile=1。