我正在 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:我正在 MysqlDataSource
上寻找 setServerTimezone
方法,但没有找到。
选项 2:我似乎没有调用这两个方法中的任何一个。
选项 3:我也没有连接 URL,因为我从 MysqlDataSource
开始,设置用户名等并从那里获取 Connection
。
我该怎么做?
最佳答案
我还没有找到原始问题的答案,但我已经找到了另一种解决方法:
- “服务器”(Mariadb/MySQL)上的默认时区是指数据库守护程序,而不是服务器框。 (文档中含糊不清)
- 您可以为数据库守护程序设置默认时区。如果没有设置(这是我的情况),它将从服务器操作系统中获取。
- 要将守护程序默认时区设置为 UTC,请编辑
/etc/mysql/my.conf
(或同等内容)并将default_time_zone = +0:00
添加到[mysqld]
部分。 - 您需要使用偏移量,而不是命名时区,除非您在
mysql
数据库中填充了与时区相关的表(它们始终存在,但默认为空)。<
附注前 Sun/Oracle 公司的一些人了解 API 设计。你们呢,如果你们读了这篇文章,举办一些内部类(class)来教那些还不明白的人吗?而且,亲爱的文档人员,如果您在文档中写下 X
是 Y
的属性,您能否确保 Y.getX()
请问存在吗?
关于java - 在 JDBC 连接上设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50901528/