【问题标题】:Oracle TIMESTAMP w/ timezone data type confusion带有时区数据类型混淆的 Oracle TIMESTAMP
【发布时间】:2011-02-21 02:47:26
【问题描述】:
您什么时候会使用带时区的 TIMESTAMP,而不是带本地时区的 TIMESTAMP?
当数据存储在数据类型为 TIMESTAMP w/local tz 的列中时,数据被归一化为数据库时区,时区位移不作为列数据的一部分存储。当用户检索数据时,Oracle 以用户的本地会话时区返回数据。
这不是更有用吗?我想不出为什么我想使用带有时区的 TIMESTAMP 并用 UTC 偏移量取回一些 gobble gook 的原因。
【问题讨论】:
标签:
oracle
datetime
date
timezone
【解决方案1】:
数据库的标准化可能并不总是准确的,原因是:
1. 在使用本地时区规范化 TIMESTAMP 时,数据库取决于客户端提供的时区(即会话时区)。由于未设置系统时区等多种原因,会话时区可能不准确。
2. 如果客户端提供了时区名称(而不是时区偏移量),数据库需要检索相应的时区偏移量。它使用系统表自动完成。现在想想夏令时。如果夏令时转换日期频繁更改,则数据库系统表中的数据可能不准确。您需要跟踪此类更改并立即获取/应用数据库补丁(这可能并不总是可行),因此数据库可以更新其系统表以反映时区偏移。
【解决方案2】:
有时,了解事件在其本地时区范围内发生的时间可能很重要 - 而不是查询它的人的等效时间。
假设示例:一个医疗应用程序记录一个人的睡眠模式。您可能会更感兴趣的是他们什么时候睡觉,在他们的时区,而不是他们什么时候睡觉,因为您自己的本地时区;另外,您还可以确定他们当时的时区,这样您就可以判断他们当时是否在时区之间旅行,并且可能患有时差。