您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
当前回答
参考本条:
主要区别:
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”
其他回答
2016+:我建议您将Mysql时区设置为UTC,并使用DATETIME:
任何最近的前端框架(Angular 1/2、react、Vue…)都可以轻松自动地将UTC日期时间转换为本地时间。
此外:
DATETIME现在可以自动设置为当前时间值。如何设置MySQL DATETIME列的默认值?与人们可能认为的相反,DATETIME比TIMESTAMP快,http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/TIMESTAMP仍然限于1970-2038
(除非您可能更改服务器的时区)
AngularJs示例
// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...
// font-end Output the localised time
{{item.my_datetime | date :'medium' }}
此处提供所有本地化时间格式:https://docs.angularjs.org/api/ng/filter/date
我发现TIMESTAMP能够基于当前时间自动更新自己,而不使用不必要的触发器,这一点非常有用。虽然TIMESTAMP是UTC,但这只是我自己。
它可以跟踪不同的时区,因此如果您需要显示相对时间,例如UTC时间就是您想要的。
时间戳是计算机通过网络时间协议(NTP)记录的事件的当前时间。
datetime是在PHP配置中设置的当前时区。
DATETIME与TIMESTAMP:
TIMESTAMP用于跟踪记录的更改,并在每次更改记录时进行更新。
DATETIME用于存储不受记录更改影响的特定静态值。
TIMESTAMP也受不同时区相关设置的影响。DATETIME是常量。
TIMESTAMP在内部将当前时区转换为UTC进行存储,并在检索期间将其转换回当前时区。
DATETIME无法执行此操作。
TIMESTAMP为4字节,DATETIME为8字节。
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”
主要区别在于DATETIME是常量,而TIMESTAMP受时区设置的影响。
因此,只有当您已经或者将来可能已经跨时区同步集群时,这才是重要的。
简单地说:如果我在澳大利亚有一个数据库,并转储该数据库以同步/填充美国的数据库,则TIMESTAMP将更新以反映新时区中事件的实时,而DATETIME仍将反映非时区中事件发生的时间。
DATETIME的一个很好的例子是在Facebook中使用TIMESTAMP,在那里他们的服务器从来都不太确定跨时区发生的时间。有一次,我正在进行一次谈话,在谈话中,时间说我在消息实际发送之前回复消息。(当然,如果时间是发布的而不是同步的,这也可能是由于消息传递软件中的时区转换错误造成的。)