首页 > 数据库 > mysql教程 > Java连接MySQL数据库时如何正确处理时区?

Java连接MySQL数据库时如何正确处理时区?

Susan Sarandon
发布: 2025-01-03 09:41:40
原创
276 人浏览过

How Can I Correctly Handle Timezones When Connecting Java to a MySQL Database?

在 Java 数据库连接中更改 MySQL 时区

MySQL 使用“GMT 8”时区运行,而 Tomcat 使用“GMT”。将 datetime 保存到数据库时,值可能看起来是正确的,但在检索时,会出现“GMT”值。此外,从数据库检索的值会转换为“GMT”,这表明数据库将它们视为“GMT 8”。

解决方案

useTimezone 参数是一个过时的解决方法。对于现代解决方案,请设置 useLegacyDatetimeCode=false 并升级到最新的 mysql JDBC 连接器。连接 URL 示例:

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false
登录后复制

时间戳处理

如果 useLegacyDatetimeCode 设置为 false,则会调用 newSetTimestampInternal() 方法。如果提供的 Calendar 为空,则日期对象的格式为数据库时区:

this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US);
this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
timestampString = this.tsdf.format(x);
登录后复制

要检索日期,请使用 getTimestamp(int) 而不使用 Calendar。同样,数据库时区将用于构建日期。

网络服务器时区无关

网络服务器的时区现在与格式无关。如果 useLegacyDatetimecode 保持 true,则使用 Web 服务器的时区,从而导致混乱。

MySQL 时区模糊性

例如,当设置为 EST 时,MySQL 可能会抱怨服务器时区模糊。要解决此问题,请在连接 URL 中指定准确的 EST 时区:

jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York
登录后复制

仅当 MySQL 引发歧义问题时才需要这样做。

以上是Java连接MySQL数据库时如何正确处理时区?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板