经典问题解答:为什么设置了MySQL连接的serverTimezone但是时间仍不一致?

引言

相信有很多人遇到过这种困惑:设置了参数后但 MySQL 显示的时间仍然不一致,这是一个很经典的问题,同样也是高发问题,在此我将为遇到该问题的朋友解惑。

设置了 serverTimezone 参数后,MySQL 的时间仍然不一致,通常是由于以下几个原因之一:

1. 数据库服务器时区与客户端时区不一致

• 原因:serverTimezone 参数仅影响客户端与服务器通信时对时区的解析。如果数据库服务器本身的时区设置不正确,那么存储在数据库中的时间可能是错误的。
• 解决办法:检查 MySQL 服务器的时区设置,确保其配置正确:

SELECT @@global.time_zone, @@session.time_zone;
如果需要更改服务器时区:

SET GLOBAL time_zone = ‘Asia/Shanghai’;
SET time_zone = ‘Asia/Shanghai’;

2. JDBC 驱动配置问题

• 原因:JDBC 连接字符串中的 serverTimezone 必须与 MySQL 服务器的时区匹配。如果 serverTimezone 设置与服务器时区不符,时间可能会发生偏移。
• 解决办法:确认你的连接字符串是否正确设置了 serverTimezone 参数:

jdbc:mysql://<host>:<port>/<database>?serv
已知这是后端项目中的application.yml中的部分内容: server: port: 9090 spring: data: redis: port: 6379 host: cache-server1 password: 123456 datasource: url: jdbc:mysql://db-server1:3306/docker?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8&useUnicode=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath*:mapper/*.xml type-aliases-package: com.lu.hotel.entity configuration: map-underscore-to-camel-case: true 把后端项目打包成hotel-0.0.1-SNAPSHOT.jar后,在docker中使用docker compose对springboot项目进行部署,新建了一个mydata目录,下面是dockerfile,docker-compose.yml,mysql,redis和hotel-0.0.1-SNAPSHOT.jar,其中把数据库的hotel.sql文件放在了mysql/init下面,hotel.sql是整个数据库的SQL文件,里面有很多表,已知dockerfile的内容如下: FROM openjdk:23-jdk-bookworm MAINTAINER docker COPY hotel-0.0.1-SNAPSHOT.jar /hotel.jar ENTRYPOINT ["java", "-jar", "/hotel.jar"] EXPOSE 9090 已知docker-compose.yml的文件内容如下: services: back-server: build: . container_name: hotel ports: - "9090:9090" networks: - demo_net depends_on: - cache-server - db-server cache-server: image: redis:6.0.8 container_name: "cache-server1" ports: - "6379:6379" volumes: - ./redis/data:/data networks: demo_net: ipv4_address: 172.16.0.4 db-server: image: mysql:5.7 container_name: "db-server1" environment: MYSQL_ROOT_PASSWORD: 'root' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'docker' MYSQL_USER: 'docker' MYSQL_PASSWORD: 'docker' ports: - "3307:3306" volumes: - ./mysql/db:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d networks: demo_net: ipv4_address: 172.16.0.3 command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci networks: demo_net: ipam: config: - subnet: 172.16.0.0/24 以上部分
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值