在JDBC连接上设置时区

时间:2018-06-18 00:44:25

标签: java mysql jdbc

我在一个时区为:

的Linux机器上运行一些java
% timedatectl
...
America/Los_Angeles (PDT, -700)

MySQLDatabase.getConnection()期间,我收到错误:

java.sql.SQLException: The server time zone value 'PDT' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specific time zone value if you want to utilize time zone support.

我无法更改服务器时区,所以我想告诉JDBC它。咨询文档here它给了我三个选项,我迷失了尝试应用它们。

选项1:我在setServerTimezone上寻找MysqlDataSource方法,但没有找到。

选项2:我似乎没有调用其中任何一种方法。

选项3:我也没有连接网址,因为我从MysqlDataSource开始,设置用户名等,然后从那里获得Connection

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我还没有找到原始问题的答案,但我已经找到了解决问题的另一种方法:

  • "服务器上的默认时区" (Mariadb / MySQL)指的是数据库守护进程,而不是服务器框。 (它在文档中含糊不清)
  • 您可以为数据库守护程序设置默认时区。如果没有设置(这是我的情况),则取自服务器操作系统。
  • 要将守护程序默认时区设置为UTC,请修改/etc/mysql/my.conf(或等效内容)并将default_time_zone = +0:00添加到[mysqld]部分。
  • 您需要使用偏移量,而不是命名时区,除非您在mysql数据库中填充了与时区相关的表(它们始终存在,但默认为空)。

P.S。前Sun / Oracle有人了解API设计。你这个家伙怎么样,如果你读到这个,就开一些内部课来教那些不懂的人?而且,亲爱的文档人员,如果您在文档中写XY的属性,那么,您能确定Y.getX()存在吗?

答案 1 :(得分:0)

在我的Rasperry Pi上,我只需要改变Rasperian的时区。

希望这会奏效, 菲利普