您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?

我在服务器端使用PHP。


当前回答

当您有来自不同国家、不同时区的游客时,TIMESTAMP非常有用。您可以轻松地将TIMESTAMP转换为任何国家/地区的时区

其他回答

主要区别在于DATETIME是常量,而TIMESTAMP受时区设置的影响。

因此,只有当您已经或者将来可能已经跨时区同步集群时,这才是重要的。

简单地说:如果我在澳大利亚有一个数据库,并转储该数据库以同步/填充美国的数据库,则TIMESTAMP将更新以反映新时区中事件的实时,而DATETIME仍将反映非时区中事件发生的时间。

DATETIME的一个很好的例子是在Facebook中使用TIMESTAMP,在那里他们的服务器从来都不太确定跨时区发生的时间。有一次,我正在进行一次谈话,在谈话中,时间说我在消息实际发送之前回复消息。(当然,如果时间是发布的而不是同步的,这也可能是由于消息传递软件中的时区转换错误造成的。)

参考本条:

主要区别:

TIMESTAMP用于跟踪记录的更改,并在每次更改记录时进行更新。DATETIME用于存储不受记录更改影响的特定静态值。

TIMESTAMP也受不同时区相关设置的影响。DATETIME是常量。

TIMESTAMP在内部将当前时区转换为UTC进行存储,并在检索期间转换回当前时区。DATETIME无法执行此操作。

TIMESTAMP支持的范围:1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTCDATETIME支持的范围:“1000-01-01 00:00:00”至“9999-12-31 23:59:59”

到目前为止,还没有提到DEFAULT CURRENT_TIMESTAMP只适用于时间戳,而不适用于DateTime类型字段。

这与只能使用DateTime而不能使用Timestamp的MS Access表相关。

我是基于语义做出这个决定的。

当我需要记录(或多或少)固定时间点时,我使用时间戳。例如,当记录被插入到数据库中时,或者当发生某些用户操作时。

当可以任意设置和更改日期/时间时,我使用datetime字段。例如,当用户可以保存以后的更改约会时。

我只在存储UTC时使用无符号BIGINT。。。

然后仍然可以在PHP中将其调整为本地时间。

要使用FROM_UNIXTIME(integer_timestamp_column)选择的DATETIME。

显然,应该在该列上设置索引,否则不会有任何进展。