0000-00-00 00:00:00作为MySQL DateTime输入

时间:2012-10-16 12:12:46

标签: mysql

下面是用于创建表的CREATE TABLE语句:

CREATE TABLE IF NOT EXISTS `data_received` (
 `id` int(10) unsigned NOT NULL,
 `edit_time` datetime NOT NULL}

以下是如果' edit_time'没有提供价值:

id  edit_time
1   0000-00-00 00:00:00

现在,如果我执行以下语句:

SELECT TIMESTAMPDIFF( HOUR , edit_time, NOW( ) ) AS diff_in_hours
FROM data_received;

我得到结果:NULL

有人可以帮我理解发生的事情吗?

5 个答案:

答案 0 :(得分:5)

这是因为 0000-00-00 00:00:00 不是函数接受的有效DATETIME表达式。

请检查documentation

答案 1 :(得分:2)

使用此方法在mysql中保留编辑时间

`edit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Auto-update time'

答案 2 :(得分:2)

Mysql倾向于插入垃圾以试图“有用”。最好告诉它不要通过设置mysql到STRICT模式来做到这一点,所以它的行为更像数据库应该。

SET sql_mode='STRICT_ALL_TABLES'

详情请参阅manual

答案 3 :(得分:1)

0000-00-00 00:00:00可能会被解释为null。在null中比较TIMESTAMPDIFF会导致null结果。

MySQL doc说

  

在MySQL中,零日期定义为'0000-00-00',即使此日期本身被视为无效。

答案 4 :(得分:0)

零年零中没有零,所以你无法计算从那时起的时间:

SELECT TIMESTAMPDIFF(HOUR, '0000-00-00 00:00:00', NOW())
  

NULL

显然MySQL对第0年本身没有问题,因为这会返回结果:

SELECT TIMESTAMPDIFF(HOUR, '0000-01-01 00:00:00', NOW())
  

17643758