mysql如何修改时区

mysql 里CST时区的坑

一、 问题简述

mysql里CST时区是个非常坑的概念,因为在mysql里CST既表示中国也表示美国的时区。但是在JDK代码里,CST这个字符串被理解为CenTral Standard Time(USA)(GMT-6),这就造成坑的原因。

解决办法
mysql 的time_zone 配置不要用SYSTEM,因为用了就是跟随system_time_zone的值,而system_time_zone读取自数据库所在宿主机的操作系统,常常是CST的值。解决办法是将time_zone改成例如 +08:00 以免造成误会。

二、 查看时区、修改时区

  1. 查看时区
    1.1、方法1

    show variables like '%time_zone%';
    

在这里插入图片描述
看time_zone就行了,SYSTEM表示其值跟随system_time_zone

而system_time_zone的CST值,是表示中国呢,还是美国呢,是不清楚的,你直接在执行 select now()
对比一下现在时间就知道了。

1.2、方法2

# 查出全局时区和会话时区
select @@GLOBAL.time_zone,@@SESSION.time_zone;

在这里插入图片描述

为什么mysql有system_time_zone和time_zone两个呢
system_time_zone就是mysql服务(即mysqld)启动的时候读取数据库所在宿主机的时区,system_time_zone固定下来后,即使服务器的时区发生改变也不会影响system_time_zone的值,除非重启mysqld服务;当system_time_zone的值为SYSTEM时,time_zone的值会跟随system_time_zone。

2、如何修改时区
2.1、修改会话级别,关闭会话就会失效,也仅仅影响当前会话窗口

set time_zone = '+08:00'

2.2、全局修改、重启mysql服务后丢失,对所有会话生效

set global time_zone = '+08:00'

2.3、永久修改,修改配置文件,重启mysql服务生效

#修改my.cnf文件,在[mysqld]节点增加default-time-zone=‘+08:00’
在这里插入图片描述
2.4、重启mysqld服务,并查看分区

systemctl restart mysqld;
show variables like '%time_zone%';

在这里插入图片描述
#可以看出配置文件修改的是time_zone的值

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值