有关复制设置中时区设置的信息,请参见第17.5.1.14节“复制和系统功能”和 第17.5.1.32节“复制和时区”。
本节介绍了MySQL维护的时区设置,如何加载命名时间支持所需的系统表,如何在时区更改时保持最新状态以及如何启用leap秒支持。
从MySQL 8.0.19开始,插入的datetime值也支持时区偏移量。有关更多信息,请参见第11.2.2节“ DATE,DATETIME和TIMESTAMP类型”。
时区变量
填充时区表
与时区变化保持同步
时区飞跃秒支持
有关复制设置中时区设置的信息,请参见第17.5.1.14节“复制和系统功能”和 第17.5.1.32节“复制和时区”。
时区变量
MySQL Server维护几个时区设置:
系统时区。服务器启动时,它将尝试自动确定主机的时区,并使用它来设置 system_time_zone系统变量。此后该值不变。
要在启动时为MySQL Server明确指定系统时区,请在启动mysqldTZ之前设置环境变量。如果使用mysqld_safe启动服务器,则其 选项提供了另一种设置系统时区的方法。对于允许值和 是取决于系统。请查阅操作系统文档,以了解可以接受的值。 --timezoneTZ–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_zon