1. 程式人生 > >MySQL的now()函式和系統時間不一致

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~