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

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

系统时间为:

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

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

什么意思呢:

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

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

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

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

4、古巴标准时间: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~

猜你喜欢

转载自my.oschina.net/u/3672057/blog/2878383