我有csv文件,看上去:
0,00018332,2016-08-29 00:00:00,2016-08-29 00:00:00,9999,仅出售零件,0,DMS海事有限公司,xyz,00000250,1971-01-01 :00:00,1971-01-01:00:00,1971-01-01 00:00:00,218335,仅售零件,9999
然后我有php脚本,它将这个csv导入到表中。
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "test.csv";
$dbtable = "res";
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$dbtable`
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
LINES TERMINATED BY ".$pdo->quote($lineseparator)); 但是,当我在db表中检查它时,值为2016-08-2900:00:00:00(列为日期时间)为0000-00- 00 :00:00,218335和9999设置为0,事件列被设置为int(11),.Everything check被正确写入。我试过使用csv和txt,我也有同样的问题。
你知道为什么吗?
编辑:
CREATE TABLE `res` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text,
`start` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
`room_id` int(11) DEFAULT NULL,
`status` varchar(30) DEFAULT NULL,
`paid` int(11) DEFAULT NULL,
`customer` varchar(50) DEFAULT NULL,
`name_ship` varchar(50) DEFAULT NULL,
`equipment` text,
`port` varchar(30) DEFAULT NULL,
`ETA` datetime DEFAULT NULL,
`ETD` datetime DEFAULT NULL,
`service_id` int(11) NOT NULL,
`service_classification` varchar(30) DEFAULT NULL,
`partners_id` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5392 DEFAULT CHARSET=latin1发布于 2016-09-16 13:35:53
您的文件是用utf16编码的,mysql不会单独检查。要么在数据源中更改它(因为您的表编码表明您无论如何都不想使用utf16字符串),要么通知mysql文件的编码。
对于您的文件,以下内容应该有效:
LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE res
CHARACTER SET utf16le
FIELDS TERMINATED BY ';\0'
LINES TERMINATED BY '\r\0\n\0';它设置文件的字符集,并在unicode中定义分隔符。你也可以使用'\n\0'。
发布于 2016-09-16 09:51:48
为什么不执行:在mysql中显示警告并查看确切的错误。
https://stackoverflow.com/questions/39526907
复制相似问题