MySQL Time Zones
是否有一个详尽的MySQL时区列表?
似乎MySQL设置中
我需要时间来展示卡尔加里当地时间。
默认情况下(至少在基于Debian的安装中)没有时区数据加载到MySQL中。如果要测试它们是否已加载,请尝试执行:
1 |
如果它返回
在许多情况下这应该可以正常工作,但有时候使用指定的时区更好,比如不担心夏令时。执行以下命令从系统加载时区数据(仅限Unix。我不确定等效的Windows命令是什么):
1 | mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql |
如果您需要不断依赖MySQL时区,则每次更新系统时区时都应执行上述命令。您也可以将其添加到每周或每月的cron作业中,以便自动为您完成。
然后,要查看时区列表,请执行以下操作:
请注意,MySQL中的时区信息占用大约5 MB。如果您想要卸载时区信息,只需执行以下命令并重新启动MySQL:
1 2 3 4 5 |
不要
编辑:
根据下面的用户注释,如果您希望在更新系统时自动更新时区,则首先需要允许root用户登录而不提示输入密码。
MySQL> = 5.6.6
执行以下:
MySQL <5.6.6
创建
然后执行
更新脚本
将以下脚本添加到crontab,每天执行一次:
1 2 3 4 5 6 7 8 9 10 11 | #!/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! " fi |
如果您不想要任何输出,请删除
注意:这(大部分)未经测试。如果您有任何问题,请告诉我,我会更新此答案。
从MySQL 5.7文档(强调我的):
timezone values can be given in several formats, none of which are
case sensitive:The value 'SYSTEM' indicates that the time zone should be the same as
the system time zone.The value can be given as a string indicating an offset from UTC, such
as '+10:00' or '-6:00'.The value can be given as a named time zone, such as
'Europe/Helsinki', 'US/Eastern', or 'MET'. Named time zones can be
used only if the time zone information tables in the mysql database
have been created and populated.
需要注意的是MySQL时区变量的默认设置是MySQL启动时的SYSTEM。 SYSTEM值是从操作系统设置获得的(例如,从符号链接
通过提供以下命令行选项,可以在启动时将MySQL的默认时区变量初始化为不同的值:
或者,如果要在选项文件中提供值,则应使用以下语法设置变量:
如果您是MySQL SUPER用户,可以使用以下语法在MYSQL>提示符下在运行时设置SYSTEM time_zone变量:
MySQL还支持单个SESSION时区值,默认为GLOBAL time_zone环境变量值。要在SESSION期间更改会话时区值,请使用以下语法:
1 |
为了询问现有的MYSQL时区设置值,您可以执行以下SQL来获取这些值:
为了它的价值,我只是用谷歌搜索mysql time_zone配置有效值并查看第一个结果。
可以从MySQL的网站下载详尽的时区列表,作为导入MySQL服务器的数据库表。
对于卡尔加里时间,您可以将UTC偏移指定为
1 |
需要注意的是MySQL时区变量的默认设置是MySQL启动时的SYSTEM。 SYSTEM值是从操作系统的GLOBAL time_zone环境变量中获取的。
通过提供以下命令行选项,可以在启动时将MySQL的默认时区变量初始化为不同的值:
或者,如果要在选项文件中提供值,则应使用以下语法设置变量:
如果您是MySQL SUPER用户,可以使用以下语法在MYSQL>提示符下在运行时设置SYSTEM time_zone变量:
MySQL还支持单个SESSION时区值,默认为GLOBAL time_zone环境变量值。要在SESSION期间更改会话时区值,请使用以下语法:
1 |
为了询问现有的MYSQL时区设置值,您可以执行以下SQL来获取这些值:
唯一的答案是:
http://timezonedb.com/download
文本以使此答案有效