【发布时间】:2011-11-04 01:33:38
【问题描述】:
我是 Oracle 的新手,一直在努力理解 Oracle DATE 类型的工作原理。
我有一个带有时区信息的 Java Date 对象。据我了解,Java Date 对象被标准化为自 1970 年 1 月 1 日以来的毫秒数。然后通过 JDBC API 将这个 Date 对象保存到数据库中。准备好的语句看起来像这样:
ps.setTimestamp(index, new java.sql.Timestamp.Timestamp(date.getTime()));
这样做是为了捕获日期和时间信息。
与该索引对应的数据库列的类型为 oracle DATE。当我将此 java.sql.Timestamp.Timestamp 对象值存储到 Oracle DATE 字段时,它是否存储标准化日期(自 1970 年 1 月 1 日以来的毫秒数)?因此,无论数据库在哪个时区,存储到 oracle DATE 列中的数据都是相同的规范化数据,对吗?
如果我将 where 子句中的这个 DATE 列与 SYSDATE 进行比较,那么当比较完成时,SYSDATE 也会被标准化。我不确定在 oracle 中是如何进行比较的,因为 oracle 服务器可以位于不同的时区。
提前致谢。
【问题讨论】:
-
DATE 类型会将日期的时间部分存储到第二个粒度,如果您需要更多详细信息,那么您应该考虑使用 TIMESTAMP 类型 (databasejournal.com/features/oracle/article.php/2234501/…)。有关 DATE 类型中时区支持的完整细分:download.oracle.com/docs/cd/B19306_01/server.102/b14225/…