首页
学习
活动
专区
圈层
工具
发布

MySQL时区
EN

Stack Overflow用户
提问于 2012-03-21 23:51:13
回答 6查看 83.6K关注 0票数 25

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

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

我需要时间展示卡尔加里当地时间。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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的默认时区变量初始化为不同的值:

代码语言:javascript
复制
--default-time-zone=timezone

或者,如果在选项文件中提供值,则应使用以下语法设置变量:

代码语言:javascript
复制
--default-time-zone='timezone'

如果您是MySQL超级用户,则可以在运行时使用以下语法从MYSQL>提示符设置系统time_zone变量:

代码语言:javascript
复制
SET GLOBAL time_zone=timezone;

MySQL还支持默认为全局time_zone环境变量值的各个会话时区值。要在会话期间更改会话时区值,请使用以下语法:

代码语言:javascript
复制
SET time_zone=timezone;

为了查询现有的MYSQL时区设置值,您可以执行以下SQL来获取这些值:

代码语言:javascript
复制
SELECT @@global.time_zone, @@session.time_zone;

为了说明它的价值,我简单地搜索了mysql time_zone配置有效值,并查看了第一个结果。

票数 22
EN

Stack Overflow用户

发布于 2013-03-15 04:47:42

默认情况下,(至少在基于Debian的安装中)不会将时区数据加载到MySQL中。如果要测试它们是否已加载,请尝试执行以下命令:

代码语言:javascript
复制
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命令是什么):

代码语言:javascript
复制
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

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

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

代码语言:javascript
复制
USE mysql;
SELECT * FROM `time_zone_name`;

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

代码语言:javascript
复制
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]:

代码语言:javascript
复制
mysql_config_editor set --login-path=client --host=localhost --user=root --password

MySQL < 5.6.6

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

代码语言:javascript
复制
[client]
user=root
password=yourMysqlRootPW

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

更新脚本

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

代码语言:javascript
复制
#!/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行。

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

票数 49
EN

Stack Overflow用户

发布于 2019-11-12 23:02:26

您可以运行此查询来获取MySQL支持的时区的完整列表:

代码语言:javascript
复制
SELECT Name
FROM mysql.time_zone_name
ORDER BY Name

(可在此页面找到:https://www.plumislandmedia.net/mysql/time-zones-mysql/)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9808160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档