如何查看这两个环境变量的值:
show global variables like '%time_zone%';
set global time_zone="+8:00";## 断开连接exit;
想要设置的时区生效,我们需要断开MySQL连接,然后重新连接MySQL,
不需要重启MySQL。网上还说使用下面命令:(
注意:我使用这种方式没有生效)
## 我使用没有生效(我的MySQL版本是:8.0.20)flush privileges;
二、now()函数与时区之间的关系
now()不仅与 当前系统时间和时区有关系,还和 MySQL中设置的时区有关系。可以这样说:now()函数的结果由这两部分组合而成。还有CURRENT_TIMESTAMP()函数也是一样。now()函数的结果计算过程:-
首先获取当前系统的时区以及时间
-
然后将上面获取的时间(带有时区信息的时间)转化为MySQL的time_zone变量设置的时区时间。形成最终结果。
# 查看时区sudo systemsetup -gettimezone# 查看时间date
假设MySQL的时区也是+8:00的话,则now()就表示当前系统时间,因为时区没有改变。
a.查看系统时间:
b.设置MySQL的时区为+8:00的时区,需要重新连接MySQL
c.查看now函数结果
结论:从第一个和第三个可以看出now()函数(MySQL)与date(系统时间)差不多,时间差是由于中间参数问题。
假设MySQL的时区是+0:00的话(伦敦时区),则now()函数的结果要比当前系统时间少8个小时。因为要从+8:00时区转化为+0:00的时区,所以就少了8个小时。
a.查看当前系统时间:
b.查看MySQL时区:
c.查看MySQL时间:
结论:可以看出MySQL中的now函数比系统中的date函数少了8个小时。这是因为系统的时区为+8:00,进入到MySQL时,需要将+8:00表示的时间转化为+0:00的时间,所以少了8个小时
三、timestamp字段与时区之间的关系
timestamp字段与时区也有着重要的关系。timestamp字段的值会随着MySQL的time_zone变化而变化。timestamp字段的值会随着MySQL的time_zone变化而变化。timestamp字段的值会随着MySQL的time_zone变化而变化。例子:当前MySQL的时区:并设置为+0:00时区。
表结构如下:有三个字段,一个主键、一个timestamp的字段、一个datetime的字段:(设置两个时间用于比较这两个字段之间的区别)
插入一条数据内容,并查看数据结果,插入一条时间为:2020-12-25 22:12:56时间的记录
修改MySQL的时区,设置为+8:00时区
查看数据结果
四、datetime与时区之间的关系
datetime、date、time字段都与时区没有任何关系,不会随着时区的变化而变化。 如果硬说datetime、date、time与Mysql时区有关系,那么只会在一个时候有关系:就是插入数据,并且使用now()函数进行插入。 准确的说:datetime、date、time和时区还是没有关系,只是这个now函数与时区有关系,所以这三个字段看似就与时区有关系了。 因为now函数会根据当前系统时间和系统时区,转化为MySQL时区的时间,所以now就是当前时区的函数,在插入datetime字段的时候,就是当前时区的时间了。所以看似有了关系。 在插入之后,以后无论时区如何变化,都不会影响datetime、date、time字段记录的内容。 注意事项:我们通过`set global time_zone`方式修改MySQL的时区,会在MySQL重启的时候恢复。我们必须修改配置文件中的默认时区变量:default_time_zone.
timestamp字段与时区有着重要关系,该字段会随着时区的变化而变化。
datetime、date、time字段与时区没有关系,不会随着时区的变化而变化。