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 默认时区。
相关推荐
枷锁—sha1 天前
【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)
数据库·sql·学习·安全·网络安全
东城绝神1 天前
《Linux运维总结:基于ARM64+X86_64架构使用docker-compose一键离线部署MySQL8.0.43 NDB Cluster容器版集群》
linux·运维·mysql·架构·高可用·ndb cluster
逍遥德1 天前
PostgreSQL 中唯一约束(UNIQUE CONSTRAINT) 和唯一索引(UNIQUE INDEX) 的核心区别
数据库·sql·postgresql·dba
工业甲酰苯胺1 天前
字符串分割并展开成表格的SQL实现方法
数据库·sql
科技块儿1 天前
IP定位技术:游戏反外挂体系中的精准识别引擎
数据库·tcp/ip·游戏
衫水1 天前
[特殊字符] MySQL 常用指令大全
数据库·mysql·oracle
卓怡学长1 天前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
小句1 天前
SQL中JOIN语法详解 GROUP BY语法详解
数据库·sql
阿杰 AJie1 天前
MySQL 里给表添加索引
数据库·mysql
昊昊该干饭了1 天前
一个真实查询需求如何从表设计走到高效 SQL
数据库·sql