是否有详尽的MySQL时区列表?
似乎MySQL设置中time_zone
的有效值取决于主机操作系统,但我无法找到可能值的列表。
我需要时间来展示卡尔加里当地时间。
答案 0 :(得分:42)
默认情况下(至少在基于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用户登录而不提示输入密码。
执行以下[source]:
mysql_config_editor set --login-path=client --host=localhost --user=root --password
创建一个~/.my.cnf
文件(如果它尚不存在)并添加以下内容:
[client]
user=root
password=yourMysqlRootPW
然后执行chmod 600 ~/.my.cnf
以确保没有其他人可以阅读它。
将以下脚本添加到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
行。
注意:这(大多数情况下)未经测试。如果您有任何问题,请告诉我,我会更新此答案。
答案 1 :(得分:18)
来自the MySQL 5.7 documentation(强调我的):
时区值可以以多种格式给出,其中没有一种格式 区分大小写:
值'SYSTEM'表示时区应该与。相同 系统时区。
该值可以作为表示与UTC的偏移量的字符串给出,例如 为'+10:00'或'-6:00'。
该值可以作为命名时区给出,例如 'Europe / Helsinki','US / Eastern'或'MET'。 指定的时区可以 仅在mysql数据库中的时区信息表时使用 已创建并填充。
应该注意MySQL timezone 变量的默认设置是MySQL启动时的SYSTEM。 SYSTEM值是从操作系统设置获得的(例如,从符号链接/etc/localtime
引用的文件中获取)
--default-time-zone=timezone
或者,如果要在选项文件中提供值,则应使用以下语法设置变量:
--default-time-zone='timezone'
如果您是MySQL SUPER用户,可以在运行时从MYSQL>设置SYSTEM time_zone 变量。使用以下语法提示:
SET GLOBAL time_zone=timezone;
MySQL还支持单个SESSION timezone 值,默认为GLOBAL time_zone 环境变量值。要在SESSION期间更改会话 timezone 值,请使用以下语法:
SET time_zone=timezone;
为了询问现有的MYSQL timezone 设置值,您可以执行以下SQL来获取这些值:
SELECT @@global.time_zone, @@session.time_zone;
为了它的价值,我只需用Google搜索 mysql time_zone配置有效值并查看第一个结果。
答案 2 :(得分:4)
我已经开始并创造了一个要点。
<击> https://gist.github.com/4134305 击>
https://gist.github.com/kinjal/9105369
我希望人们觉得它很有用。
答案 3 :(得分:3)
一个详尽的时区列表可以从MySQL的网站downloaded作为导入MySQL服务器的数据库表。
对于卡尔加里时间,您可以将UTC offsets指定为
set time_zone = '-6:00';
答案 4 :(得分:1)
您可以运行此查询以获取MySQL支持的时区的完整列表:
SELECT Name
FROM mysql.time_zone_name
ORDER BY Name
(在此页上找到:https://www.plumislandmedia.net/mysql/time-zones-mysql/)
答案 5 :(得分:0)
应该注意MySQL时区变量的默认设置是MySQL启动时的SYSTEM。 SYSTEM值是从操作系统的GLOBAL time_zone环境变量中获得的。
通过提供以下命令行选项,可以在启动时将MySQL的默认时区变量初始化为不同的值:
--default-time-zone=timezone
或者,如果要在选项文件中提供值,则应使用以下语法设置变量:
--default-time-zone='timezone'
如果您是MySQL SUPER用户,可以在运行时从MYSQL&gt;设置SYSTEM time_zone变量。使用以下语法提示:
SET GLOBAL time_zone=timezone;
MySQL还支持单个SESSION时区值,默认为GLOBAL time_zone环境变量值。要在SESSION期间更改会话时区值,请使用以下语法:
SET time_zone=timezone;
为了询问现有的MYSQL时区设置值,您可以执行以下SQL来获取这些值:
SELECT @@global.time_zone, @@session.time_zone;
答案 6 :(得分:-3)
唯一的答案: http://timezonedb.com/download
使此答案有效的文字