何时使用日期时间或时间戳

这个问题在这里已经有了答案:

  • 我应该在MySQL中使用日期时间还是时间戳数据类型? 33个答案

  • 假设你正在使用MS SQL Server(你不是,请参阅下面更新 ):

    一个表格只能有一个时间戳列。 每次插入或更新包含时间戳列的行时,时间戳列中的值都会更新。 此属性使时间戳列成为键的一个可选候选者,特别是主键。 对行进行的任何更新都会更改时间戳值,从而更改键值。 如果该列位于主键中,则旧键值不再有效,并且引用旧值的外键不再有效。 如果在动态游标中引用表,则所有更新都将更改游标中行的位置。 如果列处于索引键中,则对数据行的所有更新也会生成索引的更新。

    有关MSDN的信息

    如果您需要针对一行存储日期/时间信息,并且没有该日期/时间更改,请使用DateTime; 否则,使用时间戳。

    另请注意: MS SQL Server时间戳记字段不是日期和时间,它们是数据更改时的相对序列的二进制表示形式。

    更新

    正如你已经更新说MySQL:

    将TIMESTAMP值从当前时区转换为UTC存储,并从UTC转换回当前时区以供检索。 (这仅出现在TIMESTAMP数据类型中,而不适用于其他类型,如DATETIME。)

    从MySQL参考引用

    更值得注意的是:

    如果您存储TIMESTAMP值,然后更改时区并检索该值,则检索到的值与您存储的值不同。

    因此,如果您跨时区使用应用程序,并需要日期/时间来反映个人用户设置,请使用时间戳。 如果您需要一致性而不考虑时区,请使用日期时间


    看看我应该使用'datetime'还是'timestamp'? 它有关于该主题的全面报道。

    编辑 - 只是为了总结MySQL的属性和我的经验 -

    时间戳 -

    a)每列4字节(日期时间为8)

  • LOWER RANGE('1970-01-01 00:00:01'UTC至'2038-01-09 03:14:07'UTC)THAN DATETIME - 所以绝对不要将它用于生日等。大多数使用模式是实际上为行更新等活动提供'NOW'的'时间戳'等。
  • b)作为整数内部存储

  • 性能明智......我个人的经历一直含糊不清......有时它的速度更快......有时比DATETIME慢。 尽管它占用较少的空间。
  • c)有时区信息!

  • 所以 - 如果我在TIMESTAMP中添加'2011-01-01 3:30'(以curr时区为EST - 波士顿)..稍后,我将服务器和MySQL时区更改为PST(加州)并重新启动服务器 - 值将会更改到'2011-01-01 00:00' - (请确认...我很久以前测试过)。 但是,DATETIME将保持不变。
  • d)所有的DATE()/ DAY()/ MONTH()函数都适用于TIMESTAMP和DATETIME

    e)在MySQL中,每个表可以有多个TIMESTAMPS

  • (是的,但是只有其中一个(第一个)会随着行更新的时间自动更新,也...只有一个可以被设置为NOT NULL(认为是第一个))
  • f)表中的第一个TIMESTAMP被自动更新...

  • 所以如果您将它用于其他目的,请小心谨慎,并且希望允许空值。 (在DATETIME和TIMESTAMP中空值存储为'0000-00-00 00:00:00')
  • 我已经使用多个时间戳用于其他目的..需要节省的空间(必须非常小心,并牢记所有这些问题。

    我的建议是,只有在你知道自己在做什么的情况下,才能使用TIMESTAMP进行非时间戳记。如果SPACE是一个巨大的问题(例如 - 15,000,000行,增长和8个日期!))


    我没有清楚地回答你的问题,但请看下面的链接。 它可能会帮助你

    http://www.sqlteam.com/article/timestamps-vs-datetime-data-types

    链接地址: http://www.djcxy.com/p/25097.html

    上一篇: When to use datetime or timestamp

    下一篇: JOIN alternatives to Sub Query