下面是用于创建表的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
有人可以帮我理解发生的事情吗?
答案 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