我突然注意到我在 Oracle 11g R2 中使用的 Oracle JDBC 驱动程序认为美国的夏令时是在今年 3 月 13 日凌晨 2:59:59 之后开始的。实际上,它是在凌晨 1:59:59 之后开始的。我做了一些额外的测试并注意到该驱动程序的错误行为并不取决于它是与 Oracle 11g R2 还是 Oracle 10g 通信。此外,该驱动程序的所有可用先前版本都能正确处理夏令时更改。
这是一个已知的错误?有可用的修复程序吗?
我突然注意到我在 Oracle 11g R2 中使用的 Oracle JDBC 驱动程序认为美国的夏令时是在今年 3 月 13 日凌晨 2:59:59 之后开始的。实际上,它是在凌晨 1:59:59 之后开始的。我做了一些额外的测试并注意到该驱动程序的错误行为并不取决于它是与 Oracle 11g R2 还是 Oracle 10g 通信。此外,该驱动程序的所有可用先前版本都能正确处理夏令时更改。
这是一个已知的错误?有可用的修复程序吗?
我们的 DBA 进行了研究,发现这是一个已知错误,并且有可用的补丁程序。感谢所有关心这个问题并绞尽脑汁寻找答案的人!
编辑 9/25/2013:在撰写本文时(2 年前),Oracle JDBC 驱动程序 11.2.0.2.0 的补丁可供付费 Oracle 客户使用。我没有亲自测试过,但我相信这个问题在 Oracle JDBC 驱动程序 11.2.0.4 的当前版本中得到了解决,Oracle 可以免费下载该驱动程序。
是的,我同意这是驱动程序。如果您的列是 TIMESTAMP 类型,那么 Oracle 将允许将这些无效日期插入数据库,然后某些查询将抛出
直到数据库中的“坏”记录被更新。这个昨天更新的堆栈溢出线程有完整的细节。看看克里斯威廉姆斯的答案