php - LOAD 数据文件不导入日期时间

标签 php mysql datetime

我有 csv 文件,看起来:

0,00018332,2016-08-29 00:00:00,2016-08-29 00:00:00,9999,Sale of Parts only,0,DMS Maritime Pty Ltd,xyz,,00000250,1971-01-01 00:00:00,1971-01-01 00:00:00,218335,Sale of parts only,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)); 

但是当我在数据库表中检查它时,值 2016-08-29 00:00:00 (列是日期时间)是 0000-00-00 00:00:00 、 218335 和 9999 设置为 0 个事件列设置为 int(11)。其他一切都写正确。我尝试使用 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

最佳答案

你的文件是用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'

关于php - LOAD 数据文件不导入日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39526907/

相关文章:

javascript - 通过 JQuery Onclick 将值传递到函数中

php - HTML - 如何防止用户编辑表单的值?

MySQL查询-复杂搜索条件

php - 如何使用来自 mysql 的数据填充 android 微调器

java - 将 Android 中的 Joda 时间转换为本地时区

php - 如何处理队列中的所有项目并退出

php - 在 Linux 上将 php 文件放在后台

MySQL - 无法连接到本地 MYSQL 服务器...错误 2002?

python - matplotlib 更改刻度频率

mysql 从日期时间字段中获取所有可能的月份