首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Access 資料匯入 MySQL 完整指南:文字檔中介與 LOAD DATA INFILE 實戰

     編輯:MySQL 資料庫相關知識

將 Access 資料遷移至 MySQL,最穩健的方式是先匯出文字檔(CSV/定寬),再用 MySQL 的 LOAD DATA INFILE 或 mysqlimport 匯入。本文詳細說明匯出設定、匯入指令、欄位/行分隔符處理、編碼轉換與常見坑點。

整體流程

  1. Access 匯出文字檔(CSV)。
  2. 檢查檔案編碼、分隔符、換行符、引號包裹。
  3. MySQL 建立對應資料表結構。
  4. 使用 LOAD DATA INFILE 或 mysqlimport 匯入。
  5. 驗證資料筆數、抽樣比對。

1. Access 匯出文字檔關鍵設定

  • 欄位分隔符: 建議逗號 , 或製表符 \t,避免資料中含逗號時衝突。
  • 文字限定符: 必須勾選(雙引號 "),確保含分隔符、換行的欄位正確包裹。
  • 編碼: Access 預設 ANSI(中文為 CP950/Big5),MySQL 建議 UTF-8。匯出後用編輯器(Notepad++、VS Code)另存為 UTF-8,或用 iconv 轉碼:
    iconv -f BIG5 -t UTF-8 access_export.txt > mysql_import.txt
  • 每筆一行: 確認無欄位內嵌換行導致多行;若有,需先處理(以特殊標記替換再還原)。

2. MySQL 建表對應

CREATE 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。

3. LOAD DATA INFILE 匯入指令詳解

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()

4. mysqlimport 命令列工具(封裝 LOAD DATA)

# 本機匯入
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 可查完整列表。

5. mysqldump 導出 SQL 腳本法(替代方案)

若 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

6. 常見問題與解決

問題原因解決
匯入後中文亂碼檔案編碼與 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;

7. 大量資料匯入優化

  • 暫時關閉索引: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 遷移可達到高成功率、低人工干預。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved