mysql返回的时间和实际数据存储的时间有误差(java+mysql)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: mysql返回的时间和实际数据存储的时间有误差(java+mysql)

问题:

javaweb项目查询返回的时间总是有问题,比实际时间要晚8小时。

比如数据库记录的时间为:2019-11-21 15:52:30
而查询出来的时间为:2019-11-21 23:52:30
足足相差了8个小时


检查是jdbc连接的url中配置的时区有问题,原先是:


jdbc:mysql://172.xx.xx.xx:3306/test?useUnicode=true&characterEncoding=gbk&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC


分析:

分析:数据库的时区用的东八区(或者存储数据的时候使用的东八的时间),而javaweb项目使用的是UTC(世界统一时间、世界标准时间、国际协调时间),应该是查询出来以后java或者mysql进行时间转换。

尝试了GMT、GMT8、UTC+8,UTC0800等可能的参数,但均报错。后来在mysql文档中发现可用的时区都在/usr/share/zoneinfo目录下,ll下发现可用的时区信息如下:

lewis@lewis-dzwww:/usr/share/zoneinfo$ ll
总用量 308
drwxr-xr-x  21 root root  4096 5月  27 12:54 ./
drwxr-xr-x 334 root root 12288 6月  21 15:11 ../
drwxr-xr-x   2 root root  4096 5月  27 12:56 Africa/
drwxr-xr-x   6 root root  4096 5月  27 12:56 America/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Antarctica/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Arctic/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Asia/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Atlantic/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Australia/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Brazil/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Canada/
-rw-r--r--   1 root root  2102 4月  21 02:09 CET
drwxr-xr-x   2 root root  4096 5月  27 12:56 Chile/
-rw-r--r--   1 root root  2294 4月  21 02:09 CST6CDT
-rw-r--r--   1 root root  2437 4月  21 02:09 Cuba
-rw-r--r--   1 root root  1876 4月  21 02:09 EET
-rw-r--r--   1 root root  1972 4月  21 02:09 Egypt
-rw-r--r--   1 root root  3559 4月  21 02:09 Eire
-rw-r--r--   1 root root   127 4月  21 02:09 EST
-rw-r--r--   1 root root  2294 4月  21 02:09 EST5EDT
drwxr-xr-x   2 root root  4096 5月  27 12:56 Etc/
drwxr-xr-x   2 root root  4096 5月  27 12:56 Europe/
-rw-r--r--   1 root root   264 4月  21 02:09 Factory
-rw-r--r--   1 root root  3687 4月  21 02:09 GB
lrwxrwxrwx   1 root root     2 5月  27 09:07 GB-Eire -> GB
-rw-r--r--   1 root root   127 4月  21 02:09 GMT
lrwxrwxrwx   1 root root     3 5月  27 09:07 GMT0 -> GMT
lrwxrwxrwx   1 root root     3 5月  27 09:07 GMT-0 -> GMT
lrwxrwxrwx   1 root root     3 5月  27 09:07 GMT+0 -> GMT
lrwxrwxrwx   1 root root     3 5月  27 09:07 Greenwich -> GMT
-rw-r--r--   1 root root  1189 4月  21 02:09 Hongkong
-rw-r--r--   1 root root   128 4月  21 02:09 HST
-rw-r--r--   1 root root  1190 4月  21 02:09 Iceland
drwxr-xr-x   2 root root  4096 5月  27 12:56 Indian/
-rw-r--r--   1 root root  1678 4月  21 02:09 Iran
-rw-r--r--   1 root root  4475 2月  24 17:01 iso3166.tab
-rw-r--r--   1 root root  2265 4月  21 02:09 Israel
-rw-r--r--   1 root root   507 4月  21 02:09 Jamaica
-rw-r--r--   1 root root   355 4月  21 02:09 Japan
-rw-r--r--   1 root root   237 4月  21 02:09 Kwajalein
-rw-r--r--   1 root root 10384 2月  22 23:58 leap-seconds.list
-rw-r--r--   1 root root   655 4月  21 02:09 Libya
lrwxrwxrwx   1 root root    14 5月  27 09:07 localtime -> /etc/localtime
-rw-r--r--   1 root root  2102 4月  21 02:09 MET
drwxr-xr-x   2 root root  4096 5月  27 12:56 Mexico/
-rw-r--r--   1 root root   127 4月  21 02:09 MST
-rw-r--r--   1 root root  2294 4月  21 02:09 MST7MDT
-rw-r--r--   1 root root  2453 4月  21 02:09 Navajo
-rw-r--r--   1 root root  2460 4月  21 02:09 NZ
-rw-r--r--   1 root root  2057 4月  21 02:09 NZ-CHAT
drwxr-xr-x   2 root root  4096 5月  27 12:56 Pacific/
-rw-r--r--   1 root root  2705 4月  21 02:09 Poland
-rw-r--r--   1 root root  3453 4月  21 02:09 Portugal
drwxr-xr-x  19 root root  4096 5月  27 12:56 posix/
-rw-r--r--   1 root root  3545 4月  21 02:09 posixrules
-rw-r--r--   1 root root   414 4月  21 02:09 PRC
-rw-r--r--   1 root root  2294 4月  21 02:09 PST8PDT
drwxr-xr-x  19 root root  4096 5月  27 12:56 right/
-rw-r--r--   1 root root   800 4月  21 02:09 ROC
-rw-r--r--   1 root root   571 4月  21 02:09 ROK
-rw-r--r--   1 root root   428 4月  21 02:09 Singapore
drwxr-xr-x   2 root root  4096 5月  27 12:56 SystemV/
-rw-r--r--   1 root root  2747 4月  21 02:09 Turkey
-rw-r--r--   1 root root   127 4月  21 02:09 UCT
lrwxrwxrwx   1 root root     4 5月  27 09:07 Universal -> Zulu
drwxr-xr-x   2 root root  4096 5月  27 12:56 US/
lrwxrwxrwx   1 root root     4 5月  27 09:07 UTC -> Zulu
-rw-r--r--   1 root root  1873 4月  21 02:09 WET
-rw-r--r--   1 root root  1528 4月  21 02:09 W-SU
-rw-r--r--   1 root root 17533 4月  13 16:01 zone1970.tab
-rw-r--r--   1 root root 19014 4月  13 16:01 zone.tab
-rw-r--r--   1 root root   127 4月  21 02:09 Zulu

解决方案:

为解决此问题,可以选择东8区的Hongkong、Asia/Shanghai或者Asia/Hongkong作为参数,修改后url为:

jdbc:mysql://172.xx.xx.xx:3306/test?useUnicode=true&characterEncoding=gbk&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Hongkong


时间返回就没问题了。


总结:

UTC和


  1. 要把mysql数据库的时间和javaweb连接mysql的时区统一,比如说数据库使用GMT时间 那么javaweb项目也使用GMT时间 ,存储数据时候也用GMT时间
  2. 如果数据库连接(项目的数据库url)使用GMT时间,数据库使用GMT+8时间,则存储的时候会自动减去8个小时,读取的时候自动加上8个小时
    例如:


现在时间是: 2019-11-21 18:30:32 
数据库的存储的时间是:2019-11-21 10:30:32 
重新查询读取出来的时间是: 2019-11-21 18:30:32
需要注意的是控制台打印的插入的sql日志的时间为:2019-11-21 18:30:32  所以猜测是mysql进行存储的时候自动减去了8个小时,
而读取的时候自动自动加上了8个小时,前提:是数据库连接(项目的数据库url)使用的是GMT时间,数据库是GMT+8的时间


  1. 如果数据库连接使用GMT+8时间,数据库使用GMT+8时间,则存储的时候直接存储
    例如:


现在时间是: 2019-11-21 18:30:32 
数据库的存储的时间是:2019-11-21 18:30:32 
重新查询读取出来的时间是: 2019-11-21 18:30:32
控制台打印的插入的sql日志的时间为:2019-11-21 18:30:32


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
20 0
|
27天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
25 1
|
27天前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
18 0
|
27天前
|
存储 Java 关系型数据库
冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
8 0
|
27天前
|
存储 Java 关系型数据库
学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)
学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)
22 0
|
27天前
|
存储 Java 关系型数据库
学生管理系统【GUI/Swing+MySQL】(Java课设)
学生管理系统【GUI/Swing+MySQL】(Java课设)
19 0
|
27天前
|
存储 Java 关系型数据库
洗浴中心管理系统【GUI/Swing+MySQL】(Java课设)
洗浴中心管理系统【GUI/Swing+MySQL】(Java课设)
14 0
|
25天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
10天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
18天前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
14 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql