在PostgreSQL中,数据类型timestamp
和timestamp with timezone
都使用8个字节。
我的问题是:
timestamp with timezone
中
类型,以及在阅读类型后如何解析?答案 0 :(得分:15)
这只是一种误解,源于有点误导性的类型名称。时区本身根本不存储。它只是作为偏移来计算实际存储的UTC时间戳。这完全符合SQL标准。
只是存储了时间点,没有区域信息。这就是为什么64位信息就足够了。时间戳根据会话的当前时区设置显示给客户端。
详细说明:
此外,由于Jon提到它,time with time zone
在SQL标准中定义,因此在Postgres中实现,but its use is discouraged:
time with time zone
由SQL标准定义,但定义 表现出导致可疑用途的特性。
这是一种固有的模糊类型,无法正确处理DST。
答案 1 :(得分:3)
timestamp with timezone
可以在8个字节内正确编码,如果它实际存储了一个时区。只是时间戳需要64位,因为log 2 (298989 * 365 * 24 * 60 * 60 * 1000000)大于63.请注意time with time zone
需要 12 字节,精度相同但范围为一天。请参阅Erwin的答案,解释它实际上如何以8个字节存储 - 它应该被称为"时间戳没有时区,但存储在UTC中并转换为本地时区以供显示& #34 ;. ICK。