在MySQL中,为什么选择TIMESTAMP列而不是DATETIME列是一个好的选择?

6
免责声明:这可能是datetime vs. timestamp?的重复,但我觉得我对答案并不满意:
我的问题是: 什么是在MySQL中选择TIMESTAMP而不是DATETIME列的好理由?
我很确定我不知道这两者之间的区别,所以我将尝试列出我所知道的DATETIME(DT)相比TIMESTAMP(TS)的主要优势:
  • DT可读性强(使用TO_DATE时,TS不可读)
  • DT具有8999年的可能时间跨度(从1000-01-01 00:00:009999-12-31 23:59:59
    TS只有约68年,1970-01-012038-01-19
  • DT字段似乎表现更好(根据此博客文章
  • DT可用于高级日期计算(SELECT NOW() + INTERVAL 2 DAY
相反的:
  • TS只需要4个字节(DT使用8个字节)
  • TS以UTC值存储并根据客户端的时区设置更改
  • TS列可用作监视行何时更改的“日志”
那么我看到使用它的唯一原因就是行监视,但是看着TIMESTAMP的范围,将在“仅”28年内结束*,我宁愿使用插入或更新触发器。
那么,我错过了什么?我仍然没有看到选择时间戳的真正好理由?
3个回答

3

DT列也可以作为“日志”用于监控行更改,我使用它们和触发器来实现。

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


2

主要问题是:日期时间/时间戳字段的目的是什么?如果它只是一个类似于日志文件中的时间戳,您只需要存储实际时间,则时间戳是更好的选择。因为它只需要4个字节,并且我们正处于时间戳可以覆盖的范围内。如果它是一个日期,比如出生日期,则datetime是一个好选择。我们希望在时间戳范围结束之前能有解决方案。;)(对我的英语表示抱歉)。


1
我认同所需的存储空间,但使用DATETIME时获得的速度优势似乎可以抵消这一点,特别是当你要搜索某个特定日期的事件时。 - Dan Soap
2
我们希望在时间戳范围结束之前找到解决方案。我猜我们会在2038年1月中旬左右有一个不错的媒体谴责。 - Dan Soap

1
这是一个有趣的DT方面,我已经用过了: 在使用DT时 - 至少在MySQL中 - 你可以选择将年份留在“0000”的状态,或者同时将月份和日期设置为“00-00”。 这对于存储生日等日期而不需要完整信息非常方便!

2
是的,这确实很方便,但如果您稍后需要将数据复制/迁移到需要日期字段实际包含(真实)日期的不同DBMS中,则会变得不太方便。我已经经历过这种情况了... - sleske

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接