是否可以在 H2 驱动程序连接上设置时区

Posted

技术标签:

【中文标题】是否可以在 H2 驱动程序连接上设置时区【英文标题】:Is it possible to set timezone on H2 driver connection 【发布时间】:2014-12-08 16:14:31 【问题描述】:

参考旧帖:Set default timezone H2 database

是否可以在 H2 的当前版本中设置连接/数据库级别的时区,而不是依赖加载驱动程序的 JVM 的时区?我想将与我们的 H2 DB 的连接显式设置为 UTC,而不是依赖于系统属性。我完全理解数据库本身不存储时区信息,但它是 JDBC 驱动程序在访问数据时对时区进行了一些解释。

如果不可用,是否可以添加这样的功能(可能在 JDBC URL 字符串中)?

【问题讨论】:

听起来像XY problem。你能解释一下你想解决什么问题吗? 我想确保日期时间以 UTC 格式存储和检索。现在,我有一个 H2 数据库,其中存储了与时区无关的时间戳。这些时间戳的检索值取决于调用 JVM 的时区。如果可能的话,我确实希望允许这样做 - 我希望我的应用程序能够在连接字符串上指定所有检索到的时间戳的时区。 对不起,我不明白你的意思。你能举一个你想解决的问题的具体例子吗? @ThomasMueller,我会为您打开一个关于时区使用的错误。我在 1.3.175 中找到的。 1.4.xxx 版本中的某些内容是否有可能发生变化? @TonyChemit 是的,从那时起发生了很多变化。 【参考方案1】:

我遇到了同样的问题并实施了一个快速解决方法,方法是将这些放在加载 H2 DB 驱动程序之前。

System.setProperty("user.timezone", "UTC");
TimeZone.setDefault(null);

Class.forName("org.h2.Driver");

【讨论】:

我尝试了这个,但在某些时区仍然有一些奇怪的日期。

以上是关于是否可以在 H2 驱动程序连接上设置时区的主要内容,如果未能解决你的问题,请参考以下文章

内存数据库中的 H2:使用 JDBC 设置时区? Java 单元测试

我手机开了热点,电脑连接上了,但电脑显示没网

MySQL JDBC连接上的故障转移?

load generator不能连接上,为啥

我安装了 IIS为啥我测试的时候登陆后台说我用户名不存在啊 是否和数据库没连接上

在 JDBC 连接上切换用户