设置默认时区H2数据库

Tho*_*vik 10 h2

如何明确设置H2应该使用的时区?现在它获得了从底层操作系统使用的时区.我会假设存在一个额外的参数,我将添加到连接字符串ala我下面的那个.

db.url=jdbc:h2:mem:mybipper;MVCC=true;<timezone=UTC>
Run Code Online (Sandbox Code Playgroud)

Mic*_*Ckr 9

在 2.x 版本的 H2 数据库中,可以在 jdbc url 中设置时区。

h2database 文档中也列出了这一点。那里的例子说jdbc:h2:./test;TIME ZONE='1:00',这对我不起作用。

实际上使用 UTC 的可行解决方案是

jdbc:h2:mem:./my_database;TIME ZONE=UTC
Run Code Online (Sandbox Code Playgroud)


Cri*_*bie 8

显然,您没有连接参数,但数据库将使用加载驱动程序的JVM的时区,以便您进行设置-Duser.timezone=UTC. 请注意,加载驱动程序后无法更改时区.


Dim*_* II 7

在与数据库交互之前,您可以操作 JVM 时区:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
Run Code Online (Sandbox Code Playgroud)

不幸的是,H2 不支持每个连接的时区......但。


Wal*_*rer 5

帮助我的是为 JDBC 而不是 JVM 设置时区配置,这似乎也更合理和更清晰,因为它只影响数据库而不是整个 JVM:

spring.jpa.properties.hibernate.jdbc.time_zone=UTC
Run Code Online (Sandbox Code Playgroud)

对另一个问题的回答可能有助于提供更多信息。


Tho*_*ler 0

您无法设置数据库的时区。

但是,我不知道 H2 对大多数操作使用时区(至少不是 H2 的当前版本)。

那么,你想解决什么问题呢?

  • 如果您从 MySql 导出一些数据,则日期时间将采用 UTC 格式。如果您随后将其导入不在 UTC 服务器上的 H2 实例(例如运行测试时的本地计算机),H2 将转换日期时间,认为它们位于本地计算机区域中。数据将不再匹配。您可以编辑 SQL 以将 +00:00 添加到所有日期时间,这将解决问题,但随后 MySql(某些版本)将不再识别此问题。 (5认同)
  • 可能我解释得很糟糕。如果您在某个时区从 H2 导出然后在不同时区重新导入,也会发生同样的情况。这是因为日期时间在数据库中没有时区。这就是 H2 的设计方式,并记录在[他们的文档](http://www.h2database.com/html/tutorial.html#date_time)中。有时这是可取的,有时却不是。 (3认同)