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%';
    

mysql如何修改时区_第1张图片
看time_zone就行了,SYSTEM表示其值跟随system_time_zone

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

1.2、方法2

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

mysql如何修改时区_第2张图片

为什么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’
mysql如何修改时区_第3张图片
2.4、重启mysqld服务,并查看分区

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

mysql如何修改时区_第4张图片
#可以看出配置文件修改的是time_zone的值

你可能感兴趣的:(mysql,mysql)