Java是否自动设置Oracle会话时区?

Java是否自动设置Oracle会话时区?,java,oracle,Java,Oracle,刚才遇到了一个奇怪的问题,我希望有人能解释一下 我们的Oracle10g数据库的时区是GMT。这是它运行的服务器的时区。如果我连接到数据库并通过Java应用程序从DUAL中选择SESSIONTIMEZONE,它会告诉我-04:00 US/Eastern。如果我在C应用程序或Perl脚本中执行相同的操作,它会告诉我+00:00GMT。它们都没有显式设置会话时区。看起来Java正在将会话时区设置为执行Java应用程序的系统上的任何时区 那么为什么它与Java连接不同呢?它有什么不同?如果是这样的话,

刚才遇到了一个奇怪的问题,我希望有人能解释一下

我们的Oracle10g数据库的时区是GMT。这是它运行的服务器的时区。如果我连接到数据库并通过Java应用程序从DUAL中选择SESSIONTIMEZONE,它会告诉我-04:00 US/Eastern。如果我在C应用程序或Perl脚本中执行相同的操作,它会告诉我+00:00GMT。它们都没有显式设置会话时区。看起来Java正在将会话时区设置为执行Java应用程序的系统上的任何时区

那么为什么它与Java连接不同呢?它有什么不同?如果是这样的话,有没有办法防止它自己设置会话时区值


这会导致一些进程出现问题。我可以通过发布ALTER SESSION SET TIME_ZONE来绕过这个问题。。。调用,但为什么必须从Java调用,而不是从Perl或C调用?有什么不同?

日期、时间戳或带有[本地]时区的时间戳?与你的问题不完全相关,但我不希望日期会有所调整。我认为Java将根据语言环境设置时区,因此您可以强制将时区设置到英国-尽管我想您仍然会看到GMT/BST的分离。@DaveKub正如Alex Poole所评论的,在数据库数据类型方面使用精确的术语很重要。尤其是日期时间,因为在SQL规范和各种专有扩展中,有几种类型具有不同的行为。所以请修正你的问题。正如Alex也指出的,这与我的问题无关。实际的问题是,为什么Java连接到db时的会话时区与C或Perl时的会话时区不同?Java有什么不同之处?我的文章的其余部分仅仅是背景知识。我完全重新编写了这个问题,使之更加直接,并消除了不必要的部分。希望它现在更有意义。