MYSQL 存储java.sql.Timestamp类型的数据时,mysql存储时间和java获取到的时间相差8小时

本文主要是介绍MYSQL 存储java.sql.Timestamp类型的数据时,mysql存储时间和java获取到的时间相差8小时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

###JAVA

JDBC驱动

com.mysql.cj.jdbc.Driver
JDBC连接字符串
jdbc:mysql://127.0.0.1:3006/db?useUnicode=true&characterEncoding=UTF8&useLegacyDatetimeCode=false&serverTimezone=UTC

MySQL

时区

show global variables like “%time_zone%”;
在这里插入图片描述

问题分析

驱动 com.mysql.cj.jdbc.Driver

Java通过MySQL的jdbc驱动连接MySQL服务端:

1.通过jdbc的serverTimezone参数设置数据库连接的时区。
2.当未设置serverTimezone时,数据库将连接使用MySQL服务端的time_zone。

补充

MySQL的 system_time_zone 变量显示的是MySQL服务器启动时从操作系统获取的时区。这是服务器操作系统的当前时区,不是MySQL的当前时区。
MySQL的 time_zone 变量则是MySQL服务器当前正在使用的时区。默认情况下,这个值是’SYSTEM’,意味着MySQL将使用操作系统的时区。

结论

在JDBC连接字符串中设置了serverTimezone=UTC+8,Java应用程序将使用UTC+8时区与MySQL数据库交互。也就是说当应用程序将日期和时间发送到数据库时,它们将被视为UTC+8时区的时间。同样,从数据库检索的日期和时间也将被转换为UTC+8时区。
因此,要确保Java应用程序(通过JDBC连接字符串设置的serverTimezone)和你的MySQL数据库(通过time_zone设置的)使用的是相同的时区,以避免日期和时间的混淆。

示例

应用程序在北京时间下午3点(UTC)向Mysql数据库插入一个Timestamp,那么这个Timestamp将被视为下午3点的UTC时间。

  1. 当MySQL数据库的time_zone设置为’SYSTEM’,并且系统时区为’CST’(系统时区:Asia/Shanghai,也是UTC+8),那么这个Timestamp将存储为上午8点。
  2. 当MySQL数据库的time_zone设置为’SYSTEM’,并且系统时区为’CST’(系统时区:UTC),那么这个Timestamp将被存储为下午3点。

这篇关于MYSQL 存储java.sql.Timestamp类型的数据时,mysql存储时间和java获取到的时间相差8小时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934866

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构