5

下面是用于创建我的表的 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

有人可以帮我理解发生了什么吗?

4

5 回答 5

5

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

请检查文档

于 2012-10-16T12:17:58.423 回答
2

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

`edit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Auto-update time'
于 2012-10-16T12:18:13.633 回答
2

Mysql倾向于插入垃圾以试图“提供帮助”。最好通过将 mysql 设置为 STRICT 模式来告诉它不要这样做,这样它的行为就更像一个数据库。

SET sql_mode='STRICT_ALL_TABLES'

详情请阅读手册

于 2012-10-16T12:24:19.583 回答
1

0000-00-00 00:00:00可能会被解释为null. 并且比较会导致null结果。TIMESTAMPDIFFnull

MySQL 文档说

在 MySQL 中,零日期被定义为 '0000-00-00',即使这个日期本身被认为是无效的。

于 2012-10-16T12:18:15.837 回答
0

零年没有零的零,因此您无法计算从那时起的时间:

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

空值

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

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

17643758

于 2012-10-16T12:19:10.050 回答