时区变量
MySQL Server维护几个时区设置:
系统时区。服务器启动时,它将尝试自动确定主机的时区,并使用它来设置 system_time_zone系统变量。此后该值不变。
要在启动时为MySQL Server明确指定系统时区,请在启动mysqld之前设置TZ环境变量。如果使用mysqld_safe启动服务器,则其 --timezone o选项提供了另一种设置系统时区的方法。对于允许值和--timezone是取决于系统。请查阅您的操作系统文档,以了解可接受的值。
服务器当前时区。全局 time_zone系统变量指示服务器当前正在运行的时区。初始time_zone 值为'SYSTEM',指示服务器时区与系统时区相同。
注意
如果设置为SYSTEM,则每个需要时区计算的MySQL函数调用都会进行系统库调用,以确定当前系统时区。该调用可能受到全局互斥锁的保护,从而导致争用。
初始全局服务器时区值可以在启动时通过--default-time-zone命令行中的选项显式指定 ,也可以在选项文件中使用以下行:
default-time-zone='timezone'
如果具有 SYSTEM_VARIABLES_ADMIN或 SUPER特权,则可以使用以下语句在运行时设置全局服务器时区值:
SET GLOBAL time_zone = timezone;
每会话时区。每个连接的客户端都有自己的会话时区设置,由会话 time_zone变量指定。最初,会话变量从全局变量获取其值time_zone,但是客户端可以使用以下语句更改其自己的时区:
SET time_zone = timezone;
会话时区设置会影响对时区敏感的时间值的显示和存储。这包括由诸如NOW()或 的函数显示的值 CURTIME(),以及存储在TIMESTAMP 列中并从列中检索的值。TIMESTAMP 列的值从会话时区转换为UTC以进行存储,并从UTC转换为会话时区以进行检索。
会话时区设置不会影响功能显示的 UTC_TIMESTAMP()值DATE,例如 TIME,或 DATETIME列中的或值 。这些数据类型中的值也不会存储在UTC中;时区仅在从TIMESTAMP值转换时适用 。如果要针对DATE, TIME或 DATETIME值进行语言环境特定的算术 ,请将其转换为UTC,执行该算术,然后再转换回去。
可以按以下方式检索当前的全局和会话时区值:
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
timezone 值可以以多种格式给出,都不区分大小写:
作为值'SYSTEM',指示服务器时区与系统时区相同。
作为指示与UTC的偏移量的字符串,例如 '+10:00'或'-6:00'。
作为命名的时区,例如 'Europe/Helsinki', 'US/Eastern&