我们有一个 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 字母,请参阅此链接。