mybatis时区问题解决⽅案
从⼈家博客拿过来的  不敢说⾃⼰弄的 【捂脸】
今天使⽤mybatis查询mysql中的数据时,莫名其妙的所有时间都出错了,所有时间都⽐数据库时间多了14⼩时,考虑了⼀下,初步判定是系统时区的问题。因为mysql时区设置默认是操作系统时区,查看了下centos时区,东8区没有错,所以可以判定是代码⾥⾯设置了⼀个错误的时区。
现在开始调试mybatis源码,调试到mysql-connector-java-6.0.4.jar包的sql.cj.jdbc.io.JdbcTimestampValueFactory的createFromTimestamp⽅法时,发现mysql的底层驱动程序对从数据库查询出来的时间⽤了⼀个Calender做类型转换,Calender记录中包含的时区为CST,跟中国的时区Asia/Shanghai正好差了14⼩时。
那么为什么mybatis连接数据库会使⽤CST的美国时间呢?继续查看源码发现
mysql连接数据库的时候会从mysql读取系统的时区设置,调试sqla.MysqlaSession.java的configureTimezone⽅法发现,ServerVariable(“system_time_zone”)从系统⾥⾯读出来的时区设置是CST
⾄此问题已经清楚了,是mysql设置的时区不对,登陆linux,执⾏mysql -uroot -p, 然后运⾏命令show variables like
‘%time_zone%’,发现system_time_zone项果然是CST。
mysql的jar包下载
⾄此,排查问题结束,修改⼀下mysql的时区设置即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。