解决r2dbc连mysql时timestamp字段的时区问题

news2024/11/13 16:16:46

现象:

在两个mysql库用相同SQL都建了某表,都有created_at字段: created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 。但是在往此表insert记录时,B库的created_at字段比当前时间慢了8个小时,而A库无此问题。

背景:

命令A库B库
SHOW VARIABLES LIKE 'version';8.0.39-0ubuntu0.22.04.15.6.44
SHOW VARIABLES LIKE '%time_zone%'$12B库
SELECT @@session.time_zone AS session_time_zone, @@global.time_zone AS global_time_zone;$1B库

虽然两边mysql的版本也不一样,但我认为关键问题应该是system_time_zone不同。以下是通义灵码对这个参数的解释:

system_time_zone 是 MySQL 中的一个系统变量,它表示 MySQL 服务器所在的宿主机的操作系统时区设置。

简单来说,就是A库和B库所在宿主机的OS的时区不一样,A库宿主机在我们习惯的东八区(CST),而B库宿主机在UTC,这就比CST慢了8小时。

解决办法

翻了无数资料,有资料说可以改mysql的时区设置,但是会改掉宿主机上所有mysql库的时区,这不是我的预期。而作为一个自动插入的字段,我并不想因为这么个时区问题而对应用层的代码做什么修改。所以一直在DB连接串上想办法,最后终于找到一种可行的办法1,2

  • 切换r2dbc-mysql的实现库从jasync到io.asyncer :
    在这里插入图片描述
  • 给B库的DB连接串加上connectionTimeZone和forceConnectionTimeZoneToSession字段:
spring:
  r2dbc:
    url: r2dbc:mysql://userXXX:pswXXX@ipXXX:portXXX/dbNameXXX?connectionTimeZone=Asia/Shanghai&forceConnectionTimeZoneToSession=true

最后达到的效果是,没有改B库本身的设置,insert记录后,从数据库客户端看created_at字段还是在UTC时区,但是从后端程序读出来就是东八区的时间。附后端的BEAN类的createdAt字段的类型是LocalDateTime:

在这里插入图片描述

附似乎有参考性的文档:Setting the MySQL JDBC Timezone Using Spring Boot Configuration

其他相关问题

连A库的连接串可以加上connectionTimeZone=Asia/Shanghai属性,但是加上forceConnectionTimeZoneToSession=true就会报错。配置

logging:
  level:
    org.springframework.data.r2dbc: DEBUG
    dev.miku.r2dbc.mysql: DEBUG

后把log level降到debug,可以看到具体报错信息是code=1298, sqlState=‘HY000’, message='Unknown or incorrect time zone: 'Asia/Shanghai。翻了一些资料3,4大概是要往mysql下载并配置缺的时区信息。但考虑到A库时区本来就在东八,不加这两属性也没关系,就没坚持解决这个配置问题了。

附一些相关资料

r2dbc指定时区问题 from 腾讯云

r2dbc连接mysql8时区问题 from CSDN 也许在老一些的版本有效

老版本的mirromutth/r2dbc-mysql 用 serverZoneId


  1. MR:Aligns timezone behavior with JDBC ↩︎

  2. Issue: Aligning serverZoneId Behavior with connectionTimeZone ↩︎

  3. mysql设置时区使用‘Asia/Shanghai’时报错 ↩︎

  4. [SOLVED] Time zone issue (MySQL) ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL学习(19):锁

1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,数据是供许多用户共享的资源,数据库必须保证数据并发访问的一致性、有效性,这就要靠锁来协调实现。 MySOL中的锁,分为以下三类: &am…

深度学习基础 - 向量投影

深度学习基础 - 向量投影 flyfish 给定两个向量 a \mathbf{a} a 和 b \mathbf{b} b,我们想要计算 a \mathbf{a} a 在 b \mathbf{b} b 上的投影。 点乘 (Dot Product) 点乘是一个标量,表示两个向量在相同方向上的程度。公式为: a ⋅ b …

行为验证码热门行业解决方案

行为式验证码是一种较为流行的验证码。从字面来理解,就是通过用户的操作行为来完成验证,而无需去读懂扭曲的图片文字,以下是常见的案例。 ​​热门行业解决方案 教育解决方案 教育资源不断线上化,使得违法违规内容风险不断提高&…

最近在西安召开的学术会议:EI检索超快,信息系统与计算技术领域!

第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8日-11月11日在中国西安盛大举行,由长沙理工大学主办,同济大学、西北工业大学联合协办。会议聚焦信息系统与计算技术等相关研究领域,广泛邀请国内外知…

货运物流App项目开发功能介绍

货运小程序通常具备多种功能,以便于用户管理和跟踪货物运输。以下是一些常见的功能介绍: 注册和登录: 用户可以通过手机号码或邮箱注册并登录账户。 货物发布: 用户可以创建货运订单,填写货物信息(如品名、…

Proxmox vzdump backup ct vm

vzdump 参考 vzdump 备份参数参考 创建一键Proxmox vzdump 备份ct 虚拟机 vzdump 备份参数参考vmid 105 106 22-29行是环境变量,根据主机的实际情况更改ct 模板默认下载目录/var/lib/vz/template/cache所有备份默认目录/var/lib/vz/dumpiso 存放/var/lib/vz/template/iso# -*…

【扒代码】CCFF跨尺度特征融合

import torch import torch.nn as nn import torch.nn.functional as Fclass RepVggBlock(nn.Module):def __init__(self, ch_in, ch_out, actrelu):super().__init__()self.ch_in ch_in # 输入通道数self.ch_out ch_out # 输出通道数# 第一个卷积层,使用 3x3 卷…

iOS ------ UIKit相关

UIView和CALayer UIView UIView表示屏幕上的一块矩形区域,它是基本上iOS中所有可视化控件的父类。UIView可以管理矩形区域里的内容,处理矩形区域的事件,包括子视图的管理以及动画的实现。 UIKit相关类的继承关系 UIView继承自UIResponde…

封装加载(raect18+antd)

该组件主要是anted的组件中自带的loading属性&#xff0c; 1、封装loading组件 import React from react;function WithLoading(WrappedComponent: React.ComponentType<any>) {return (props: any) > {const [isLoading, setIsLoading] React.useState(true);Reac…

基于JAVA的高考智能排考场系统设计与实现,源码、部署+讲解

绪 论 随着教育规模的不断扩大和技术的进步&#xff0c;传统的考试管理方式面临着诸多挑战&#xff0c;如考试安排的复杂性、作弊现象的频发以及考试过程中的监督和管理等问题。因此&#xff0c;针对这些挑战&#xff0c;智能排考系统应运而生。 智能排考系统利用先进的技术…

接口基础知识5:详解request headers(一篇讲完常见字段)

课程大纲 一、请求头的定义 HTTP请求头部&#xff08;HTTP Request Headers&#xff09;&#xff1a;HTTP协议中的一部分&#xff0c;用于在客户端和服务器之间传递附加信息。这些头部字段提供了关于请求、客户端环境、或请求的上下文的信息。 请求头是键值对的形式&#xff…

day04-套餐管理

完成套餐管理模块所有业务功能&#xff0c;包括&#xff1a; 新增套餐套餐分页查询删除套餐修改套餐起售停售套餐 要求&#xff1a; 根据产品原型进行需求分析&#xff0c;分析出业务规则设计接口梳理表之间的关系&#xff08;分类表、菜品表、套餐表、口味表、套餐菜品关系…

element plus el-select修改后缀图标

使用 element plus 提供的api 默认为&#xff1a; 修改后为&#xff1a; 方法&#xff1a; <el-select v-model"value" placeholder"Select" size"large" style"width: 120px;":teleported"false" :suffix-icon"…

图数据库Neo4j的调研

图数据库Neo4j的调研 一、neo4j基础概述 概述 neo4j作为当下最热门的图数据库之一&#xff0c;他的底层实现是java语言&#xff0c;所以安装的时候必须有jre环境。并且neo4j是根据计算机中图论理论来实现的。 neo4j图数据库主要有以下组成元素&#xff1a;&#xff08;具体…

Kibana,Docker Remote Api,Kubernetes Api Server我未授权访问漏洞(附带修复方法)

一.Kibana Kibana是⼀个开源的分析与可视化平台&#xff0c;设计出来⽤于和Elasticsearch⼀起使⽤的。你可以⽤kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互⽅式是以各种不同的图表、表格、地图等直观地展示数据&#xff0c;从⽽达到⾼级的数据分…

【数据链路层】ARP协议

文章目录 以太网以太网帧对的格式 MAC地址对比MAC地址和IP地址 MTU和MSSARP协议ARP协议的工作原理ARP欺骗 以太网 ”以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输…

数学思维曼哈顿距离

前言&#xff1a;刚刚看到这个题的时候模拟了一下&#xff0c;感觉就是一个曼哈顿距离的问题&#xff0c;我们计算当前位置和中心的曼哈顿距离&#xff0c;然后比较x 或 y 到中心距离的大小&#xff0c;如果有一个小于等于&#xff0c;那么就是ok的 #define _CRT_SECURE_NO_WAR…

正点原子imx6ull-mini-Linux驱动之Linux IIO 驱动实验

工业场合里面也有大量的模拟量和数字量之间的转换&#xff0c;也就是我们常说的 ADC 和 DAC。 而且随着手机、物联网、工业物联网和可穿戴设备的爆发&#xff0c;传感器的需求只持续增强。比如手 机或者手环里面的加速度计、光传感器、陀螺仪、气压计、磁力计等&#xff0c;这些…

【数据结构】关于栈你必须知道的内部原理!!!

前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;小编这期将带来关于栈的相关知识&#xff0c;以及代码的实现&#xff0c;希望能够帮到屏幕前的你。 &#x1f4da;️上期双链表博客在这里哟&#xff1a;http://t.csdnimg.cn/xgjK1&#xff1b; &#x1f4…

预测云计算的未来

云计算的未来是否依旧未知&#xff1f; 直到最近&#xff0c;云计算还是软件编程界之外很少有人熟悉的一个概念。如今&#xff0c;云计算已成为一切的基础&#xff0c;从点播电视服务和在线游戏门户网站到电子邮件和社交媒体&#xff0c;这四大现代世界的基石。云计算将继续存在…