時(shí)區(qū)支持
使用的時(shí)區(qū)由 time_zone 全局變量和 session 變量決定关顷。time_zone 的默認(rèn)值是 System柴我,System 對(duì)應(yīng)的實(shí)際時(shí)區(qū)在 TiDB 集群 bootstrap 初始化時(shí)設(shè)置。具體邏輯如下:
優(yōu)先使用 TZ 環(huán)境變量
如果失敗艘儒,則從 /etc/localtime 的實(shí)際軟鏈地址提取聋伦。
如果上面兩種都失敗則使用 UTC 作為系統(tǒng)時(shí)區(qū)界睁。
在運(yùn)行過程中可以修改全局時(shí)區(qū):
mysql> set global time_zone='+8:00'; # 因?yàn)閁TC時(shí)區(qū) 修改時(shí)間 建議使用
mysql> SET GLOBAL time_zone = timezone; # 根據(jù)具體情況使用,不建議禁止使用
TiDB 還可以通過設(shè)置 session 變量 time_zone 為每個(gè)連接維護(hù)各自的時(shí)區(qū)逾礁。默認(rèn)條件下,這個(gè)值取的是全局變量 time_zone 的值嘹履。修改 session 使用的時(shí)區(qū):
mysql> SET time_zone = timezone;
查看當(dāng)前使用的時(shí)區(qū)的值:
mysql> SELECT @@global.time_zone, @@session.time_zone;
設(shè)置 time_zone 的值的格式:
'SYSTEM' 表明使用系統(tǒng)時(shí)間
相對(duì)于 UTC 時(shí)間的偏移债热,比如 '+10:00' 或者 '-6:00'
某個(gè)時(shí)區(qū)的名字,比如 'Europe/Helsinki'窒篱, 'US/Eastern' 或 'MET'
NOW() 和 CURTIME() 的返回值都受到時(shí)區(qū)設(shè)置的影響。
注意墙杯,只有 Timestamp 數(shù)據(jù)類型的值是受時(shí)區(qū)影響的「刃可以理解為避消, Timestamp 數(shù)據(jù)類型的實(shí)際表示使用的是 (字面值 + 時(shí)區(qū)信息)低滩。其它時(shí)間和日期類型召夹,比如 Datetime/Date/Time 是不包含時(shí)區(qū)信息的岩喷,所以也不受到時(shí)區(qū)變化的影響。
mysql> select now(); # 當(dāng)前
+---------------------+
| now() |
+---------------------+
| 2018-12-25 11:11:11 |
+---------------------+
1 row in set (0.00 sec)
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 ('2018-12-25 11:11:11', '2018-12-25 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 |
+---------------------|---------------------+
| 2018-12-25 11:11:11 | 2018-12-25 11:11:11 |
+---------------------|---------------------+
1 row in set (0.00 sec)
上面的例子中婶溯,無論怎么調(diào)整時(shí)區(qū)的值偷霉, Datetime 類型字段的值是不受影響的,而 Timestamp 則隨著時(shí)區(qū)改變类少,顯示的值會(huì)發(fā)生變化。其實(shí) Timestamp 持久化到存儲(chǔ)的值始終沒有變化過硫狞,只是根據(jù)時(shí)區(qū)的不同顯示值不同。
Timestamp 類型和 Datetime 等類型的值财忽,兩者相互轉(zhuǎn)換的過程中泣侮,會(huì)涉及到時(shí)區(qū)即彪。這種情況一律基于 session 的當(dāng)前 time_zone 時(shí)區(qū)處理活尊。
另外,在導(dǎo)數(shù)據(jù)的過程中深胳,也要需注意主庫和從庫之間的時(shí)區(qū)設(shè)定是否一致。
轉(zhuǎn)載于:https://blog.51cto.com/13767724/2335122