將 Access 資料遷移至 MySQL,最穩健的方式是先匯出文字檔(CSV/定寬),再用 MySQL 的 LOAD DATA INFILE 或 mysqlimport 匯入。本文詳細說明匯出設定、匯入指令、欄位/行分隔符處理、編碼轉換與常見坑點。
LOAD DATA INFILE 或 mysqlimport 匯入。, 或製表符 \t,避免資料中含逗號時衝突。"),確保含分隔符、換行的欄位正確包裹。iconv 轉碼:iconv -f BIG5 -t UTF-8 access_export.txt > mysql_import.txtCREATE TABLE `samp_table` (
`id` INT NOT NULL,
`name` VARCHAR(50) NOT NULL,
`gender` CHAR(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
IGNORE 1 LINES。LOAD DATA INFILE 'c:/mysql_import.txt'
INTO TABLE `samp_table`
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(id, name, gender);
| 子句 | 用途 | 範例 |
|---|---|---|
CHARACTER SET | 指定檔案編碼,MySQL 自動轉換至表字元集 | CHARACTER SET utf8mb4 |
FIELDS TERMINATED BY | 欄位分隔符 | ','、'\t'、'|' |
FIELDS ENCLOSED BY | 欄位包裹字元(強制) | '"'" |
FIELDS OPTIONALLY ENCLOSED BY | 欄位可選包裹(僅含特殊字元時包裹) | '"'"(CSV 常用) |
FIELDS ESCAPED BY | 逸出字元(預設 \\) | '\\\\' |
LINES TERMINATED BY | 行結束符 | '\\n' (Linux)、'\\r\\n' (Windows) |
IGNORE n LINES | 跳過前 n 行(如標題列) | IGNORE 1 LINES |
(col1, col2, ...) | 指定匯入欄位順序(可省略、重排、跳過) | (id, name, gender) |
SET col = expr | 匯入時轉換/計算欄位值 | SET created_at = NOW() |
# 本機匯入
mysqlimport -u root -p --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --lines-terminated-by='\r\n' --ignore-lines=1 --local db_name /path/to/samp_table.txt
# 遠端匯入
mysqlimport -h 192.168.1.10 -u root -p --fields-terminated-by=',' db_name /path/to/samp_table.txt
資料表名.txt(對應表名)。--local 表示從客戶端讀取檔案(預設伺服器端讀取需 FILE 權限)。LOAD DATA 子句,mysqlimport --help 可查完整列表。若 Access 能透過 ODBC 連線 MySQL,或先遷移至 SQL Server 再用工具,也可產出 SQL 腳本:
mysqldump -u root -p --no-create-info --compact db_name table_name > data.sql
mysql -u root -p db_name < data.sql
| 問題 | 原因 | 解決 |
|---|---|---|
| 匯入後中文亂碼 | 檔案編碼與 CHARACTER SET 不符 | 確認檔案實際編碼,指定正確 CHARACTER SET |
| 資料截斷/錯位 | 分隔符衝突、缺少包裹字元、行尾符不符 | 用編輯器檢視原始檔,調整 TERMINATED BY/ENCLOSED BY/LINES TERMINATED BY |
| ERROR 1290 (HY000) The MySQL server is running with the --secure-file-priv option | 安全限制,只能讀取指定目錄 | 將檔案放入 secure_file_priv 目錄,或用 mysqlimport --local |
| 主鍵重複/外鍵失敗 | 資料髒、匯入順序錯誤 | 先匯入主表、再從表;或暫時關閉外鍵檢查 SET FOREIGN_KEY_CHECKS=0; |
ALTER TABLE tbl DISABLE KEYS; 匯入後 ENABLE KEYS;(僅 MyISAM 有效,InnoDB 不支援)。innodb_buffer_pool_size、innodb_log_file_size、max_allowed_packet。mydumper/myloader 多執行緒工具)。LOAD DATA INFILE 而非 INSERT,速度快 20 倍以上。遵循「標準化文字檔 + 明確指定分隔符編碼 + LOAD DATA INFILE」流程,Access 轉 MySQL 遷移可達到高成功率、低人工干預。