JDBC连接时有个TimeZone配置,我是使用Postgresql和Mysql两个数据库验证的。结果如下:
数据库 | 部署方式 | 版本 | JDBC连接TimeZone参数 | JDBC连接serverTimezone参数 | 总结 |
Mysql | docker | 8.0 | 没用 | 有用,会使用客户端时区与设置的参数时区比较,并返回客户端时区对应的时间,详见实例1 | Mysql使用JDBC连接时可以配置serverTimezone参数告诉客户端服务器的时区,因为Mysql的TimeStamp类型是没有时区概念的,且没有timestamp with time zone数据类型,只能通过连接时配置数据库server的时区,并通过两时区的对比,返回正确的客户端时区的时间 |
Postgresql | docker | 15.3 | 没用 | 没用 | Postgresql使用JDBC连接时,时区参数均无效,但Postgresql有timestamp with time zone数据类型,使用该数据类型时不管数据库是什么时区设置,也不管客户端是什么时区设置,只要你的客户端时区不变,你存取得到的都是同一个时间,该时间的时区取决于客户端的时区。数据库中存储的是对应的UTC时区时间 |