mysql的时区问题

对于刚启动的mysql服务来说,时区是不重要的,但是当哪天突然发现时区不一致导致的数据不一致问题时候,就会注意到mysql的时区不一致。

普遍的mysql,你可以根据下面命令来查看mysql的时区。

mysql 复制代码
select @@time_zone;

这样可以看到mysql的时区,我这里是CST。

不过这里要小心,CST有很多,可以代表中国、也可以代表美国中部。

这时候,你需要看一下服务器的时区。

shell 复制代码
#查看当前系统时区
timedatectl
# 或
ls -l /etc/localtime

这样就可以看到系统的时区,可以看到是shanghai、这说明是中国时区,没有问题。

你还可以根据这个命令,来查看mysql是根据自己设置的时区,还是根据系统。

shell 复制代码
SELECT @@global.time_zone, @@session.time_zone;

如果不是

那如果你不是我上面的内容,你想要修改时区。

你可以使用临时修改,临时会话,在这个会话里,你的查询都会使用你所设置的时区,但是当脱离这个会话,就会恢复

shell 复制代码
SET time_zone = '+08:00';
-- 或
SET time_zone = 'Asia/Shanghai';

如果想要永久修改的话,就需要去配置**/etc/my.cnf**的内容。

你需要在my.cnf后面再加上这两个来设置时区

复制代码
[mysqld]
default-time-zone = '+08:00'
# 或
default-time-zone = 'Asia/Shanghai'

然后使用systemctl进行重启。

shell 复制代码
systemctl restart mysql

最后来验证一下是否是你想要的时间内容。

shell 复制代码
SELECT NOW(), CURTIME(), @@time_zone;

应用

你的服务在连接数据库的时候也可以配置时区。

java 复制代码
# java 示例:连接时指定时区
jdbc:mysql://localhost:3306/test_db?serverTimezone=Asia/Shanghai

这样就可以和数据库的时区保持一致,不会出现服务显示时间和mysql的不一致问题了。

PS

JDBC 客户端的默认行为:

  1. MySQL 8.0+ 连接时告警:The server time zone value 'CST' is unrecognized or represents more than one time zone.意思是你在连接数据库没设置timezone
  2. MySQL 5.x 使用本地 JVM 默认时区。
相关推荐
haixingtianxinghai12 小时前
Redis的定期删除和惰性删除
数据库·redis·缓存
资深web全栈开发12 小时前
PostgreSQL Schema 最佳实践:架构师的命名与组织艺术
数据库·postgresql
麦聪聊数据13 小时前
利用实时数据管道与 SQL2API 重构企业自动化审计架构
数据库·sql·低代码
麦聪聊数据13 小时前
重构开放生态:利用 QuickAPI 跨越遗留系统与敏捷交付的工程实践
数据库·sql·低代码·restful
百结21418 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY18 小时前
时区问题解决
数据库
Leinwin18 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_4176950518 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水18 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat18 小时前
MySQL 服务基础
数据库·mysql