问题描述:
使用springmvc作为框架,往数据库里插入(更新)数据时,发现时间格式的数据自动减少了14小时。
比如:我INSERT INTO test_table (id, name, birthday) VALUES(1, 'chen', '2017-12-12 15:00:00')
通过代码插入到数据库后,发现birthday字段的时间并不是'2017-12-12 15:00:00',而是'2017-12-12 01:00:00'。
(注:在MySQL中直接执行:INSERT INTO test_table (id, name, birthday) VALUES(1, 'chen', '2017-12-12 15:00:00');是正确的)
问题解决:
碰到这个问题,我第一个直觉是时区的问题,但是不知道怎么下手,只能一个一个去尝试。
首先我先看了下服务器端的时区,date -R,显示的时区是正确的;
然后我查看了MySQL所用的时区:SHOW VARIABLES LIKE '%time_zone%'
查询结果如下:
system_time_zone CST
time_zone SYSTEM
是跟系统的时区一样的。
说明MySQL数据库本身的配置没有问题,那么就是程序本身的配置问题了。
但是我将自己的项目和先前的项目配置进行了对比,并没有发现不一样的地方。
百度过程中看到一篇博文:https://segmentfault.com/q/1010000010791397
发现我和他发生的情况一样,我使用的也是新版6.0驱动,但是我的MySQL的版本是5.5.52-MariaDB。
我原先的配置如下:
driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://192.168.164.129\:3306/test?useSSL\=false&useUnicode\=true&characterEncoding\=utf8&autoReconnect\=true
然后在路径后面添加了&serverTimezone\=Hongkong
修改后如下:
driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://192.168.164.129\:3306/test?useSSL\=false&useUnicode\=true&characterEncoding\=utf8&autoReconnect\=true&serverTimezone\=Hongkong
重新测试代码,发现以上bug解决了。
参考的其它博文:http://blog.csdn.net/qq631431929/article/details/51731834
时区简绍:http://blog.sina.com.cn/s/blog_a72ec20c0101jgxd.html