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~

相關文章
相關標籤/搜索