Java 在JDBC连接上设置时区

Java 在JDBC连接上设置时区,java,mysql,jdbc,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 ei

我正在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。参考文档,它给了我三个选项,我无法尝试应用它们

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

选项2:我似乎没有调用这两种方法中的任何一种

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


我该怎么做

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

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

另外,ex Sun/Oracle的一些人了解API设计。你们这些家伙呢,如果你们读到这篇文章,就开一些内部课程来教那些还不懂的人?亲爱的医生们,如果你在你的文档中写
X
Y
的一个属性,你能确保
Y.getX()
存在吗?

在我的Rasperry Pi上,我刚刚不得不更改Rasperian的时区

希望这会奏效,
Philipp

“服务器时区配置属性”是指数据源上的值。请参阅或。@Andreas是,因此我正在查找
MysqlDataSource.setServerTimezone()
,但找不到它。你能分享一个有效的API调用吗?我刚刚检查了mysql-connector-java-5.1.46,它确实存在;serverTimeZone=US/Pacific在我的例子中(中欧)itworked@GordThompson啊,有意思,我查了6.0.6和8.0.11,但在那里找不到。源代码中的搜索在名为ConnectionProperties的接口上显示了这样一个方法:但我也不清楚如何使用它。这正是我不想做的;-)