MySQL的now()函数和系统时间不一致

因为把电脑时间隐藏了,想看时间,而且正好打开了MySQL的窗口,就使用select now();查看时间,这一看,看到了刚装的MySQL-8的一个问题:MySQL查询的时间和系统时间不一致。mysql

系统时间为: sql

相差8个小时,第一个想法是查看一下时区是否是不对,如图。 session

系统时区是CST,中央标准时间 Central Standard Time(CST)。3d

什么意思呢:code

CST是美国、澳大利亚、古巴或中国的标准时间。blog

一、美国中部时间:Central Standard Time (USA) UT-6:00io

二、澳大利亚中部时间:Central Standard Time (Australia) UT+9:30table

三、中国标准时间:China Standard Time UT+8:00ast

四、古巴标准时间:Cuba Standard Time UT-4:00登录

解决方式

而后退出后从新登陆就能够了,显示当前时间和我如今的时间一致了。

从新登陆以后,再次查看时间:

查看当前使用的时区

SELECT @@global.time_zone, @@session.time_zone;

设置 time_zone 的值的格式:

  1. ‘SYSTEM’ 代表使用系统时间
  2. 相对于 UTC 时间的偏移,好比 ‘+10:00’ 或者 ‘-6:00’
  3. 某个时区的名字,好比 ‘Europe/Helsinki’ , ‘US/Eastern’ 或 ‘MET’

NOW() 和 CURTIME() 的返回值都受到时区设置的影响。

注意,只有 Timestamp 数据类型的值是受时区影响的。能够理解为, Timestamp 数据类型的实际表示使用的是 (字面值 + 时区信息)。 其它时间和日期类型,好比 Datetime/Date/Time 是不包含时区信息的,因此也不受到时区变化的影响。

mysql> create table t (ts timestamp, dt datetime);
Query OK, 0 rows affected (0.02 sec)

mysql> set @@time_zone = 'UTC';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t values ('2017-09-30 11:11:11', '2017-09-30 11:11:11');
Query OK, 1 row affected (0.00 sec)

mysql> set @@time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t;
+---------------------|---------------------+
| ts | dt |
+---------------------|---------------------+
| 2017-09-30 19:11:11 | 2017-09-30 11:11:11 |
+---------------------|---------------------+
1 row in set (0.00 sec)

OK~

相关文章
相关标签/搜索