java - 在 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 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)来教那些还不明白的人吗?而且,亲爱的文档人员,如果您在文档中写下 XY 的属性,您能否确保 Y.getX()请问存在吗?

关于java - 在 JDBC 连接上设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50901528/

相关文章:

php - 如何优化 MySQL 查询并降低服务器负载?

java - 如何在addBatch()中添加SELECT语句?

java - JTextArea不会更新java

java - 553 抱歉,身份验证失败或超时。请先收到消息以验证自己的身份。(#4.4.3)

Mysql 按分层文本排序,但按数字排序?

javascript - 使用 find 时不调用 Sequelize getter

java - 事务管理器未回滚 Spring Batch 作业

java - 无法使用源选项编译 Java 11 代码

java - 基于 JLabel 将 JRadioButton 设置为 true

java - 使用JAVA向数据库表中插入多行