gpt4 book ai didi

MySQL 时区

转载 作者:IT老高 更新时间:2023-10-28 23:51:47 27 4
gpt4 key购买 nike

是否有详尽的 MySQL 时区列表?

似乎 MySQL 设置中 time_zone 的有效值取决于主机操作系统,但我一直无法找到可能值的列表。

我需要时间显示卡尔加里本地时间。

最佳答案

默认情况下,(至少在基于 Debian 的安装上)没有时区数据加载到 MySQL 中。如果您想测试它们是否已加载,请尝试执行:

SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');

如果它返回 DATETIME(在本例中为 2012-06-07 08:00:00),则您已加载时区。如果它返回 NULL,则它们不是。未加载时,您只能使用偏移量进行转换(例如 +10:00-6:00)。

这在很多情况下都可以正常工作,但有时最好使用命名时区,比如不用担心夏令时。执行以下命令从系统加载时区数据(仅限 Unix。我不确定等效的 Windows 命令是什么):

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

如果您需要持续依赖 MySQL 时区,则上述命令应该在每次系统时区更新时执行。您也可以将它添加到每周或每月的 cron 作业中以自动为您完成。

然后,要查看时区列表,只需执行以下操作:

USE mysql;
SELECT * FROM `time_zone_name`;

请注意,时区信息在 MySQL 中占用大约 5 MB。如果您想卸载时区信息,只需执行以下命令并重新启动 MySQL:

TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;

不要DROP这些表,否则会发生不好的事情。


编辑:

根据下面的用户评论,如果您希望在更新系统时自动更新时区,您首先需要允许 root 登录而不提示输入密码。

MySQL >= 5.6.6

执行以下 [ source ]:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

MySQL < 5.6.6

创建一个 ~/.my.cnf 文件(如果它还不存在)并添加以下内容:

[client]
user=root
password=yourMysqlRootPW

然后执行 chmod 600 ~/.my.cnf 以确保没有其他人可以读取它。

更新脚本<​​/h2>

将以下脚本添加到crontab,每天执行一次:

#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24
# hours and do not have ".tab" in the name (since these are not timezone files)
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
echo "Updating MySQL timezone info"
# Note, suppressing STDERR here because of the .tab files above
# that cause warnings.
mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
echo "Done!\n"
fi

如果您不需要任何输出,请删除 echo 行。

注意:这(大部分)未经测试。如果您有任何问题,请告诉我,我会更新此答案。

关于MySQL 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9808160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com