我有一个应用程序,其目标是在GMT格式的数据库中设置所有时间戳,如果没有像update_ts timestamp without time zone
那样的时区创建那些时间戳,或者这样做是否更安全/更好或者是创建没有时区的时间戳的坏主意。
答案 0 :(得分:9)
我有一个应用程序,其目标是以GMT格式在数据库中包含所有时间戳
在这种情况下,timestamp with time zone
(timestamptz
)正是您想要的,尽管在SQL中对时间戳类型进行了坦率的愚蠢命名。
“带时区的时间戳”实际上是“以utc存储并在输入/输出上转换的时间戳”。
“没有时区的时间戳”是“没有时区转换的时间戳存储和检索”。
如果您将“有/无时区”视为“有/无时区转换”,则类型会更有意义。
尽管他们有名字,但两种类型都没有实际存储时区。没有SQL类型的“带时区的时间戳”实际应该是什么,这是本地时间存储时带有tz偏移和时区的明确指示。(一个简单的由于DST转换的模糊性,UTC偏移不够好。
如果要以UTC格式执行所有操作,请使用timestamptz
并将服务器TimeZone
设置为UTC。那样做的应用程序想要进行本地时间转换,仍然可以通过设置TimeZone
来获取它。