在 MySQL 中设置时区

Subhan Hagverdiyev 2023年12月11日
  1. 在 MySQL 中显示服务器中的当前时间
  2. 更改配置文件以更改 MySQL 中的时区
  3. 更改 Global time_zone 变量以更改 MySQL 中的时区
  4. 仅为 MySQL 中的会话更改时区
在 MySQL 中设置时区

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

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

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

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

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

SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-02-19 21:58:15 |
+---------------------+
1 row in set (0.00 sec)

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

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

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

+--------------------+--------------------+
| @@GLOBAL.time_zone |@@SESSION.time_zone |
+--------------------+--------------------+
| SYSTEM             | SYSTEM             |
+--------------------+--------------------+
1 row in set (0.00 sec)

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

更改配置文件以更改 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 偏移值。

SET GLOBAL time_zone = '-4:00';

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

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

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

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

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

仅为 MySQL 中的会话更改时区

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

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

SET time_zone = "+00:00";
Subhan Hagverdiyev avatar Subhan Hagverdiyev avatar

Subhan is a professional back-end developer as well as mobile developer. He is also open-source contributor by writing articles.

LinkedIn