是否有详尽的MySQL时区列表?
MySQL设置中time_zone的有效值似乎取决于主机操作系统,但我一直无法找到可能值的列表。
我需要时间展示卡尔加里当地时间。
发布于 2012-03-21 23:56:07
来自the MySQL 5.7 documentation (重点是我的):
时区值可以采用多种格式提供,每种格式都不区分大小写:
值' system‘表示时区应与系统时区相同。
该值可以以字符串的形式给出,表示与UTC的偏移量,例如'+10:00‘或'-6:00’。
该值可以指定为指定的时区,例如'Europe/Helsinki‘、’US/ or‘或'MET’。只有在创建并填充了数据库中的时区信息表后,才能使用mysql命名时区。
应该注意,在MySQL启动时,MySQL时区变量的缺省设置是SYSTEM。系统值从操作系统设置中获取(例如,从符号链接/etc/localtime引用的文件中获取)
通过提供以下命令行选项,可以在启动时将MySQL的默认时区变量初始化为不同的值:
--default-time-zone=timezone或者,如果在选项文件中提供值,则应使用以下语法设置变量:
--default-time-zone='timezone'如果您是MySQL超级用户,则可以在运行时使用以下语法从MYSQL>提示符设置系统time_zone变量:
SET GLOBAL time_zone=timezone;MySQL还支持默认为全局time_zone环境变量值的各个会话时区值。要在会话期间更改会话时区值,请使用以下语法:
SET time_zone=timezone;为了查询现有的MYSQL时区设置值,您可以执行以下SQL来获取这些值:
SELECT @@global.time_zone, @@session.time_zone;为了说明它的价值,我简单地搜索了mysql time_zone配置有效值,并查看了第一个结果。
发布于 2013-03-15 04:47: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` ;Do not DROP 这些表,否则会发生不好的事情。
编辑:
根据下面的用户评论,如果您希望在更新系统时自动更新时区,您首先需要允许root用户登录,而不会提示输入密码。
MySQL >= 5.6.6
执行以下[source]:
mysql_config_editor set --login-path=client --host=localhost --user=root --passwordMySQL < 5.6.6
创建一个~/.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行。
注意:这(大部分)都是未经测试的。如果你有任何问题,请告诉我,我会更新这个答案。
发布于 2019-11-12 23:02:26
您可以运行此查询来获取MySQL支持的时区的完整列表:
SELECT Name
FROM mysql.time_zone_name
ORDER BY Name(可在此页面找到:https://www.plumislandmedia.net/mysql/time-zones-mysql/)
https://stackoverflow.com/questions/9808160
复制相似问题