Laravel的Schema Builder中的timestamps()和timestampsTz()方法之间有什么区别?我尝试搜索Google,但找不到任何帮助。
答案 0 :(得分:3)
基本上timestampsTz()代表Timestamp with Timezone
,而timestamps()就像Timestamp without timezone
TimestampsTz()
是特定时间点的表示。该时间的调整是根据与系统相关的时区进行的。
常规timestamps()
更像常规时钟。
看看这个例子:
如果您使用的是timestamps()
函数,那么您还将存储环境所选择的时区。如果您使用的是timestampsTz()
,则将无法确保时区安全。
注意:每次使用timestampsTz()存储的时间都存储在UTC(世界标准时间)中。
我想当您确定所有数据都在同一区域内时,或者在该区域上有另一层可以处理时间转换时,最好使用timestamp without timezone
。
我在StackExchange上找到了一个很好的例子,我将在这里引用:
例如,假设您正在2013-06-15(尚未在DST中)安排某个事件在2013-01-15 10:00(该时间已经在DST中)发生,并且在2013-06-15,您所在的地区被指定采用夏令时;但是,此后的某个时间,政府更改了规则,并说您所在的地区将不再使用DST,您的计划时间突然变为2013-01-15 11:00(而不是10:00),即如果您使用时间戳记WITH时区,并保持TZ配置为最新。当然,如果您跟踪自己感兴趣的地区/时区中的规则更改并更新受影响的记录,那么您可能还会注意到也可以使用时区来处理此类情况。
更新:
在数据库中,普通timestamps()
看起来像
2004-10-19 10:23:54
timestampsTz()
看起来像
2004-10-19 10:23:54+02
更新2:
Laravel中的这些函数可用于每种类型的数据库。但这仅适用于PostgreSQL。看一下文档:PostgreSQL Timestamp。在其他数据库中,时区信息会自动包含在时间戳中。
在所有其他数据库中,这将具有相同的输出。
答案 1 :(得分:0)
timestampsTz()
=添加可为空的created_at和Updated_at TIMESTAMP(带有时区)的等效列。
timestamps()
=添加可空的created_at和updated_at TIMESTAMP等效列。
区别在于timestampsTz()
添加了一个时区。