Mysql

mysql載入數據本地infile正在跳過第一行的第一列

  • February 13, 2017

我們有一個 PHP 腳本,它已經從 WAMP 伺服器上的命令行執行了幾年。我現在將其轉換為在 Linux(AWS EC2 AMI 實例)上執行。該腳本基本上將數據從 csv 載入到 mysql 表中。它幾乎可以工作,但由於某種原因,它跳過了第一行第一列中的數據。這是sql:

LOAD DATA LOCAL INFILE '/var/scripts/_output/ref_dtl_output.csv'
REPLACE INTO TABLE  MY_TABLE.ref_dtl

FIELDS TERMINATED BY ','
ENCLOSED BY ''

LINES TERMINATED BY '\n'

它正在載入的文件從幾百字節到 > 100K 字節不等。在每種情況下,無論是數千行還是 1 行,第一行的第一列始終為“0”或空字元串。我檢查了每個 csv,那裡有數據。這在 Windows 伺服器上從未發生過。

我嘗試從 PHP 腳本中執行上面的 SQL,我還嘗試使用 HeidiSQL 導入它並得到相同的結果。

CREATE TABLE `ref_dtl` (
`site_id` INT(11) NOT NULL,
   `business_date` DATE NOT NULL,
   `trans_seq` INT(10) NOT NULL,
   `dtl_seq` INT(10) NOT NULL,
   `parent_trans_seq` INT(10) NOT NULL,
   `parent_dtl_seq` INT(10) NOT NULL,
   `ref` CHAR(20) NOT NULL,
   `ref_type` CHAR(3) NOT NULL,
   PRIMARY KEY (`site_id`, `business_date`, `trans_seq`, `dtl_seq`, `parent_trans_seq`, `parent_dtl_seq`),
   INDEX `site_id` (`site_id`),
   INDEX `business_date` (`business_date`),
   INDEX `trans_seq` (`trans_seq`),
   INDEX `dtl_seq` (`dtl_seq`),
   INDEX `parent_trans_seq` (`parent_trans_seq`),
   INDEX `parent_dtl_seq` (`parent_dtl_seq`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

關於如何修復的任何想法?

根據文本文件的來源,這裡的 csv 文件,它可能具有順序字節 (BOM)字元。

在這種情況下,第一行的第一列將是無效整數,並將在數據庫中保存為 0。

要檢查文件開頭是否有 BOM 字母,請參閱此連結

引用自:https://dba.stackexchange.com/questions/164184