在 MariaDB 中设置命名时区
本文描述在 MariaDB 中设置命名时区的步骤。
命名时区是指使用时区的名字,而不是和标准时间的小时差。比如 Asia/Chongqing
是命名时区,而 +08:00
不是命名时区。
在 MariaDB 中,您默认情况下并不能直接使用命名时区。要使用他们,您必须先配置他们。
下面介绍如何在 MariaDB 中配置命名时区。
时区表
和 MySQL 相同,在 MariaDB 中的 mysql
数据库中具有以下时区表:
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
这些表会随着 MariaDB 安装而创建,但是他们是空的。你需要首先填充这些表,才能使用他们。
要填充这些表,请根据不同的操作系统进行操作。
如果你的系统包含 zoneinfo 文件,比如 Mac OS, Linux, FreeBSD, Sun Solaris, 请使用 mysql_tzinfo_to_sql
实用程序从 zoneinfo 文件中读取并填充 mysql.time_zone*
表。
如果你的系统不包含 zoneinfo 文件,比如 Windows, 请到 https://dev.mysql.com/downloads/timezones.html 下载对应的文档,并将他们填充到 mysql.time_zone*
表。
从 zoneinfo 导入时区
如果您的系统是类 Unix 系统,比如 Mac OS, Linux, FreeBSD, Sun Solaris, 请运行以下命令加载时区表到 MariaDB 中的 mysql
数据库中:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mariadb -u root -p mysql
或者
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
根据提示输入 root
用户的密码, 时区表会被立刻填充。
您可能会收到一个警告:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
您可以忽略这个警告。这是由于类 Unix 系统不包含闰秒,但是,这符合 POSIX(可移植操作系统接口)标准。
从 MySQL 提供的脚本中导入
对于 Windows 系统,由于没有没有 zoneinfo 数据库,您需要通过 SQL 脚本加载时区表。请按照以下步骤操作:
-
下载 SQL 脚本: https://downloads.mysql.com/general/timezone_2022g_posix_sql.zip。
-
解压缩刚刚下载的文件,您会得到一个文件:
timezone_posix.sql
。 -
使用以下命令登录 MariaDB:
.\mysql.exe -u root -p
输入 root 用户密码,并确认。
-
连接 MySQL 数据库
USE mysql
-
从 SQL 脚本文件导入数据:
SOURCE C:\Users\Adam\Downloads\timezone_posix.sql
使用时区表
当通过上面的方法导入时区信息后,您可以从 mysql.time_zone_name
查询以检查是否正确导入。
例:
SELECT *
FROM mysql.time_zone_name;
输出:
+----------------------------------+--------------+
| Name | Time_zone_id |
+----------------------------------+--------------+
| Africa/Abidjan | 1 |
| Africa/Accra | 2 |
| Africa/Addis_Ababa | 3 |
| Africa/Algiers | 4 |
| Africa/Asmara | 5 |
| Africa/Asmera | 6 |
| Africa/Bamako | 7 |
| Africa/Bangui | 8 |
| Africa/Banjul | 9 |
| Africa/Bissau | 10 |
...
...
| Zulu | 597 |
+----------------------------------+--------------+
597 rows in set (0.000 sec)
结论
本文描述了在不同的系统中填充 MariaDB 时区表的不同的方法。