在MySQL中选择TIMESTAMP而非DATETIME列的理由是什么?

时间:2010-02-07 22:57:59

标签: mysql date datetime timestamp

免责声明:这可能与datetime vs. timestamp?重复,但我觉得我不相信答案:

我的问题是:
在MySQL中选择TIMESTAMP而非DATETIME列的理由是什么?

我很确定我不知道这两者之间的差异,所以我将尝试列出DATETIME(DT)与TIMESTAMP(TS)相比的主要优点据我所知:

  • DT具有人类可读性(TS并非没有使用TO_DATE
  • DT的可能时间为8999年(1000-01-01 00:00:009999-12-31 23:59:59
    TS仅约68年,1970-01-012038-01-19
  • DT字段似乎表现更好(根据this blog post
  • DT可用于高级日期计算(SELECT NOW() + INTERVAL 2 DAY

反之亦然:

  • TS只需要4个字节(DT使用8)
  • TS存储为UTC值,并根据客户端的时区设置进行更改
  • TS列可用作“日志”,用于监控行何时发生更改

我看到使用它的唯一原因是行监控,但是查看TIMESTAMP的范围,它将以“仅”28年*结束,我宁愿选择插入或更新触发。

那么,我错过了什么?我仍然没有看到为任何目的选择时间戳的非常好的原因?

*我知道,这看起来很长,但是在60年代,一些工程师还决定削减年度字段的2个字节,因为他们的计算机系统永远不会运行直到2000年......

3 个答案:

答案 0 :(得分:2)

DT列也可以作为“日志”用于监视行何时更改,我使用它们并触发器来执行此操作。

我在处理大量PHP时经常使用时间戳来减少过多的日期解析。如果需要,我可以更新我的软件以使用日期时间。

答案 1 :(得分:2)

主要问题是:dateime / timestamp字段的用途是什么?如果它只是一个时间戳,就像在日志文件中,你只存储实际时间,那么时间戳是更好的选择。因为它只需要4个字节,我们在范围内的时间戳可以覆盖它。如果是出生日期之类的日期,则日期时间是不错的选择。我们希望在时间戳范围结束之前我们会有解决方案。 ;)(对不起我的英文)。

答案 2 :(得分:1)

这是我已经使用的DT的一个有趣的方面: 使用DT - 至少在MySQL中 - 您可以选择将年份保留为“0000”,和/或将月份和日期保留为“00-00”。 这对于存储生日日期而不需要完整信息非常方便!