MySQL CSV 导入 - 输入的日期为 0000-00-00 00 :00:00 if timestamp has milliseconds?

标签 mysql csv mysqlimport

我目前有大量 CSV 文件要导入到 MySQL 数据库中。这些文件包含每条记录的时间戳,格式如下(例如):

2011-10-13 09:36:02.297000000

我知道 MySQL 错误 #8523,它表明不支持在日期时间字段中存储毫秒数。尽管如此,我还是希望日期时间字段在秒后截断记录,而不是输入为空白。

我已经将问题缩小到毫秒(而不是 csv 等的格式),因为

2011-10-13 09:36:02

正确导入。

任何人都可以建议一种方法,让我可以在没有零的情况下导入这些数据吗?我有太多的 CSV,无法手动进入每一个并调整时间戳的长度/格式。

我应该指出,虽然毫秒是一个很好的选择,但它们对我的应用程序来说并不是必需的,所以我很高兴有一个允许我轻松截断数字并导入它们的解决方案。

谢谢!

编辑:为了澄清,我正在使用以下命令导入 CSV:

mysqlimport --fields-enclosed-by="" --fields-terminated-by="," --lines-terminated-by="\n" --columns=id,@x,Pair,Time -p --local gain [file].csv

这对于导入记录来说非常快 - 我有大约 50m 的内容要导入,因此读取每一行并不是一个好的选择。

最佳答案

我不知道你如何导入 CSV,但我会做的方法是编写一个脚本 (php/perl) 来读取每个文件,将时间戳四舍五入或修剪为秒,然后在文件上执行 INSERT 语句数据库。

有点像

<?php
$file=fopen("your.csv","r");
mysql_connect ($ip, $user, $pass);

while(!feof($file))
{
   $line = explode(',',fgets($file));
   mysql_query("INSERT INTO TABLE1 (ID, DATE) values (".$line[0].", ".substr($line[1],0,19).")");
}
fclose($file);
?>

从命令行执行它,它应该完成工作

关于MySQL CSV 导入 - 输入的日期为 0000-00-00 00 :00:00 if timestamp has milliseconds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904175/

相关文章:

PHPExcel 将 XLS 转换为具有特殊字符的 CSV

python - 解析csv文件并根据相对大小将行写入文件

php - csv文件导入到mysql数据库使用php面临导入错误

php - 导入 LOAD DATA INFILE 时将我的 php 变量连接到 csv 数据

mysql - 如何使用 Sinatra 和 Datamapper 将数组从表单传递到数据库?

mysql - 如何在没有安装 office 的情况下从 winform vb.net 2008 导出到 excel?

parsing - 使用 shell 脚本解析 csv 行中的名称值对

mysql - 在 Git 推送和 pull 上导出和导入数据库

mysql - 在VB中将特定值从一个文本框输出到多个文本框

php - 我可以 "echo"从 wordpress 站点到子域站点的最新消息吗?