# 时区的修改

__*TiDB 时区的修改*__
__*time_zone*__

![left](./student-guide/diagram/ModifyingTimeZone_zh_001_20220627.png)
-------------------------------------------------------------
TiDB 使用的时区由 time_zone 全局变量和 session 变量决定。time_zone 的默认值是 System,System 对应的实际时区在 TiDB 集群 bootstrap 初始化时设置。具体逻辑如下:
- 优先使用 TZ 环境变量
- 如果失败,则从 /etc/localtime 的实际软链地址提取。
- 如果上面两种都失败则使用 UTC 作为系统时区。

在运行过程中可以修改全局时区:
SET GLOBAL time_zone = timezone;

TiDB 还可以通过设置 session 变量 time_zone 为每个连接维护各自的时区。默认条件下,这个值取的是全局变量 time_zone 的值。修改 session 使用的时区:
SET time_zone = timezone;

查看当前使用的时区的值:
SELECT @@global.time_zone, @@session.time_zone;

设置 time_zone 的值的格式:
- 'SYSTEM' 表明使用系统时间
- 相对于 UTC 时间的偏移,比如 '+10:00' 或者 '-6:00'
- 某个时区的名字,比如 'Europe/Helsinki', 'US/Eastern' 或 'MET'

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

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

参考信息:https://docs.pingcap.com/zh/tidb/stable/configure-time-zone