Mysql导入将时间戳空值转换为0000-00-00:00:00

Mysql导入将时间戳空值转换为0000-00-00:00:00,mysql,ruby-on-rails,mysqlimport,Mysql,Ruby On Rails,Mysqlimport,我有一些定期生成的文本文件,其中包含要使用mysqlimport插入mysql的sql行。其中一列的值为Null,数据库中的此列是datetime字段,默认值设置为Null。但是在运行mysql导入后,我在本专栏中得到了0000-00-00:00:00的值,那么我如何才能摆脱它呢?我希望插入时列值为Null 编辑: 注: 1) 使用INSERT语句直接插入行时,不会出现此问题,列值通常设置为NULL,因此这与mysqlimport 2) 我使用这个mysqlimport:mysqlimport-

我有一些定期生成的文本文件,其中包含要使用mysqlimport插入mysql的sql行。其中一列的值为Null,数据库中的此列是datetime字段,默认值设置为Null。但是在运行mysql导入后,我在本专栏中得到了0000-00-00:00:00的值,那么我如何才能摆脱它呢?我希望插入时列值为Null

编辑: 注:

1) 使用INSERT语句直接插入行时,不会出现此问题,列值通常设置为NULL,因此这与
mysqlimport

2) 我使用这个mysqlimport:
mysqlimport-u root-p-h localhost--columns='''--local--fields以='','结尾。

3) 数据文件中一行的示例:
5964,45,0,0,NULL,45,5,8678696784865142,1,NULL,NULL,NULL,19


4) datetime列是在处创建的rails timestamp
,它是通过rails迁移创建的。

可以快速破解:

  • 暂时将datetime列的类型更改为
    VARCHAR
    ,以便null值变为空字符串

  • 导入完成后,将该列的类型更改回datetime,它将为您提供所需的结果:)


如果表定义允许null,并且默认为null,并且源数据也包含\N,则应按预期获取null。MySQL在很多方面都不是一个可靠的数据库服务器,所以我需要您的源代码(至少一些示例)来诊断实际问题。可能是空字符串,而不是\N.

将所有相关行(其datetimefield中有000…000)设置为NULL如何?哦,这个问题读错了-你以前需要它。显示日期时间列为空的首选方法是将其存储为
0000-00-00 00:00:00
格式。大多数开发人员都是这样做的,我不知道你为什么要更改它。@Imran真的吗?我从来没有听说过任何开发人员,我知道这样做。。。总是存储为NULL。我知道这有点太明显了,但是列允许NULL吗?另外,将默认值设置为NULL。可能无法修复它,但值得一试。您的列是否具有
默认NULL
属性?我想你可以这样做,但我不是肯定的。我定期生成数据文件,所以我不能使用这种方法。这很好,但这可能会帮助其他人解决类似的问题:)一条记录的示例:
5964,45,0,0,0,NULL,45,5,8678696784865142,1,NULL,NULL,NULL,19
请尝试使用\N(NULL转义)而不是NULL。我将确认MySQL是否将空字符串视为空字符串。还有一个重要的选项可以使MySQL在抛出错误时停止。MySQL接受的无效日期真的很烦人,但事实上,如果出现任何错误,它都应该无法导入。它成功了!!写入\N而不是NULL成功了!这意味着NULL字符串被解释为未定义的值,因此插入了默认的零值,datetime为0000-00-00 00:00:00,非常感谢:)实际上NULL是无效的日期表示形式MySQL正在默默地转换为0000-00-00。它应该会失败,但在处理遗留系统和数据库时,使用MySQL只是一个需要考虑的选择。对于新软件,人们应该总是更喜欢PostgreSQL而不是MySQL。您的导入应在无效数据上发出嘎嘎声。