栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记一次JAVA问题排查:查询出来的LocalDateTime类型时间不受serverTimezone影响

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

记一次JAVA问题排查:查询出来的LocalDateTime类型时间不受serverTimezone影响

前提

jdbc和mybatis依赖的版本


	org.mybatis
	mybatis
	3.5.7


	mysql
	mysql-connector-java
	8.0.25
	runtime

服务器所在时区UTC+8,
配置文件中设置serverTimezone=UTC

1.字段createtime是LocalDateTime类型
现在服务器时间是**18:00**,
使用**LocalDateTime=18:00**插入到数据库还是**18:00**
查询数据,服务器使用LocalDateTime查出来还是**18:00**

按道理说,服务器时间和数据库时间应该会不同的,因为服务器时区和serverTimezone的时区是不一样的,但是很明显LocalDateTime类型的数据不受serverTimezone影响,后面会有博主根据源码调试的结果也证明确实LocalDateTime类型不受serverTimezone影响

2.字段createtime是Date类型
现在服务器时间是**18:00**,
使用**Date=18:00**插入到数据库还是**10:00**
查询数据,服务器使用Date查出来还是**18:00**

因为服务器时区和serverTimezone的时区是不一样的,Date类型的数据受serverTimezone影响,后面会有博主根据源码调试的结果证明Date类型受serverTimezone影响

结论:

1.LocalDateTime在jdbc中会不经处理直接映射成数据库表中的时间。查询的时候也是会将数据库表中时间直接映射成LocalDateTime。其实就是默认数据库时区和服务器时区是一致的
2.Date类型则会在jdbc中被处理,受serverTimeZone的影响,会先将Date类型的数据转换成serverTimeZone时区的时间存入数据库。查询的时候也会根据serverTimeZone来将数据库中的时间转换成服务器时间再映射成Date类型数据。

如果感兴趣可以看看博主的另一篇文章,其中包含jdbc在插入和查询Date和LocalDateTime类型数据时的处理逻辑
jdbc源码调试之查看jdbc对LocalDateTime和Date类型的处理

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

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

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