Windows 導出的 CSV 默認 GBK 編碼,MySQL 常配置為 UTF-8,直接導入會導致中文亂碼。本文提供標準化導入流程:編碼轉換 → LOAD DATA INFILE 參數化導入。
# GBK → UTF-8 iconv -f GBK -t UTF-8 /tmp/source.csv -o /tmp/source_utf8.csv # 驗證轉換結果 head -n 5 /tmp/source_utf8.csv | cat -A
LOAD DATA INFILE '/tmp/source_utf8.csv' INTO TABLE db1.target_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES -- 跳過標題行 (id, email, password, name, address, dept, mobile); -- 指定列映射順序
| 參數 | 說明 | 常見值 |
|---|---|---|
FIELDS TERMINATED BY | 字段分隔符 | ','、'\t'、';' |
OPTIONALLY ENCLOSED BY | 字段包裹符(處理含分隔符的值) | '"'"'"、'"'"'" |
LINES TERMINATED BY | 行結束符 | '\n' (Linux)、'\r\n' (Windows) |
IGNORE n LINES | 跳過前 n 行(通常跳過標題) | 1 |
(col1, col2...) | 目標表列映射,順序對應 CSV 列 | 可選,省略則按表定義順序 |
REPLACE / IGNORE | 主鍵/唯一鍵衝突處理 | REPLACE 覆蓋、IGNORE 跳過 |
SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;,導入後恢復並 COMMITLOAD DATA LOCAL INFILE,需服務端開啟 local_infile=ON 且客戶端加 --local-infileNULL 值處理:CSV 中用 \N 表示 NULL,或指定 NULLIF(col, '')SHOW WARNINGS 查看導入警告,information_schema.innodb_metrics 監控進度# PowerShell 轉碼 Get-Content source.csv -Encoding Default | Set-Content source_utf8.csv -Encoding UTF8 # MySQL Workbench / Navicat / DBeaver 圖形化導入向導(自動處理編碼映射)