栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Java在数据库连接中更改MySQL时区?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Java在数据库连接中更改MySQL时区?

useTimezone是较旧的解决方法。MySQL团队最近才重写了setTimestamp /
getTimestamp代码,但是只有在您设置连接参数useLegacyDatetimeCode = false且使用的是最新版本的mysql
JDBC连接器时,才能启用它。因此,例如:

String url = "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false

如果下载mysql-connector源代码并查看setTimestamp,很容易看到发生了什么:

如果使用旧日期时间代码=
false,则调用newSetTimestampInternal(…)。然后,如果传递给newSetTimestampInternal的Calendar为NULL,则将日期对象格式化为数据库的时区:

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

日历为空非常重要-因此请确保您使用的是:

setTimestamp(int,Timestamp).

…不是setTimestamp(int,Timestamp,Calendar)。

现在应该很清楚这是如何工作的。如果您使用java.util.Calendar在美国/洛杉矶(或您想要的任何时区)构造日期:2011年1月5日3:00
AM,并调用setTimestamp(1,myDate),那么它将使用您的日期,请使用SimpleDateFormat在 数据库时区中
对其进行格式化。因此,如果您的数据库位于America / New_York,它将构造要插入的字符串‘2011-01-05
6:00:00’(因为NY比LA提前3小时)。

要检索日期,请使用getTimestamp(int)(不带日历)。它将再次使用数据库时区来建立日期。

注意: Web服务器时区现在完全不相关! 如果未将useLegacyDatetimepre设置为false,则使用Web服务器时区进行格式设置-
增加很多混乱。


注意:

MySQL可能抱怨服务器时区模棱两可。例如,如果您的数据库设置为使用EST,则Java中可能有几个可能的EST时区,因此您可以通过确切地告诉它mysql-
connector的数据库时区是什么来为mysql-connector澄清这一点:

String url = "jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York";

如果抱怨,您只需要这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号