在 MySQL 中设置时区

有很多关于 MySQL 和时区管理的文章,但在本文中,我们将尝试填补缺失的信息。我们将介绍如何有效地处理时区。

在 MySQL 中显示服务器中的当前时间

有时,在使用 MySQL 服务器时,你需要处理不同的时区,这有时会让你感到困惑。例如,你需要根据客户的时间设置 MySQL Server 时间或将数据迁移到不同的服务器和时区。

当你切换到夏令时 (DST) 时区时,也可能发生这种情况。为了确保时区与计划的一致,你必须检查或更改 MySQL 服务器时区。

首先,我们需要检查 MySQL 服务器中的当前时间,以检查它是否是所需的时区。

SELECTNOW();+---------------------+
|NOW()|+---------------------+
|2022-02-1921:58:15|+---------------------+
1rowinset(0.00sec)

我们还可以查询当前的全局和会话时区值。

SELECT@@GLOBAL.time_zone,@@SESSION.time_zone;

默认响应是 system,这意味着服务器和系统时区是相同的。

+--------------------+--------------------+
|@@GLOBAL.time_zone|@@SESSION.time_zone|+--------------------+--------------------+
|SYSTEM|SYSTEM|+--------------------+--------------------+
1rowinset(0.00sec)

有几种方法可以更改时区;让我们一一看看。

更改配置文件以更改 MySQL 中的时区

最简单的方法是编辑配置文件并设置默认时区。你可以通过以下代码从 Linux 服务器的终端打开 my.cnf 配置文件。

$ sudo vi /etc/mysql/my.cnf

打开文件后,我们需要向下滚动一点找到 [mysqld] 部分,在这里我们将看到 default-time-zone = "+00:00"。此处 "+00:00" 显示与 GMT 区域的偏移量。

我们可以通过设置"+01:00"将其更改为匈牙利的时区。在某些情况下,你可能没有 [mysqld] 部分;在这种情况下,你需要将其添加到文件的末尾。

编辑文件后,我们需要关闭它并使用以下命令重新启动服务器。

$ sudo service mysql restart

更改 Global time_zone 变量以更改 MySQL 中的时区

我们还可以更改服务器的全球时区并设置新的 GMT 偏移值。

SETGLOBALtime_zone='-4:00';

在此命令中,你需要设置你所在时区的 GMT 偏移量。我们将其设置为 GMT -4:00 小时。

你还可以使用其他定义,例如更改变量或编写特定时区名称。

SETGLOBALtime_zone='Europe/Budapest';SET@@global.time_zone='+02:00';

如果我们使用特定时区的名称而不是数值,我们可能会遇到一个小问题。如果我们收到未知或不正确的时区错误,则时区数据不会加载到 MySQL 服务器中。

你可以按照填充时区表解决此问题。

仅为 MySQL 中的会话更改时区

如你所见,我们最初查询了两个变量;其中之一是 system_time_zone

通过更改此变量,你不会更改全局时区,而只会更改每个会话的时区;重新启动服务器并再次运行后,你将回到原来的时区。

SETtime_zone="+00:00";