我有一个包含列last_crawled_article_at timestamp default NULL
当我尝试使用WHERE
子句进行更新时,我注意到了一个问题:
UPDATE feed
SET last_crawled_article_at=?, last_captured_id=?
WHERE
feed = ? AND
last_crawled_article_at < ?
如果last_crawled_article_at
为NULL
,则更新永远不会成功,因为没有包含last_crawled_article_at
大于NULL
的任何行。
如果我的表中有一个带有时间戳NULL
的条目,我会进行下一个查询:
SELCT FROM feed WHERE last_crawled_article_at < '2018-01-01 00:00:00'
Mysql不会返回任何内容。
我解决此问题的方法是将last_crawled_article_at
添加到0000-00-00 00:00:00
我的问题是,为什么lt
时间戳范围查询不会返回值为NULL
的条目?
以某种方式建议不要将timestamp
字段作为默认值使用NULL
字段?
答案 0 :(得分:0)
如果您还想更新空值,则必须添加or last_crawled_article_at is null
UPDATE feed
SET last_crawled_article_at=?, last_captured_id=?
WHERE
feed = ? AND
(last_crawled_article_at < ? or last_crawled_article_at is null)