Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在查找MYSQL时区表的描述_Mysql_Timezone - Fatal编程技术网

正在查找MYSQL时区表的描述

正在查找MYSQL时区表的描述,mysql,timezone,Mysql,Timezone,在过去的一个小时里,我一直在尝试不同的谷歌搜索,但我找不到任何关于MYSQL时区表的详细描述。我已经看过了,但这还不足以让我弄明白(至少到目前为止) 我不介意阅读手册,但有人能给我指出一本描述这些表格结构的手册吗 然后我想生成SQL,它可以采用时区名称并生成时区缩写。然后是从缩写和国家代码到时区名称的倒转。我发现了一些建议使用的SQL来实现这些功能,但如果不了解它们访问的表,我会犹豫是否使用这些SQL /* Input: sourcedt : Input datetime string in

在过去的一个小时里,我一直在尝试不同的谷歌搜索,但我找不到任何关于MYSQL时区表的详细描述。我已经看过了,但这还不足以让我弄明白(至少到目前为止)

我不介意阅读手册,但有人能给我指出一本描述这些表格结构的手册吗

然后我想生成SQL,它可以采用时区名称并生成时区缩写。然后是从缩写和国家代码到时区名称的倒转。我发现了一些建议使用的SQL来实现这些功能,但如果不了解它们访问的表,我会犹豫是否使用这些SQL

/*
Input:  sourcedt : Input datetime string in context of source
            sourcetzn : timezone used for sourcedt
            basetzn:  Default timezone used by server
            displaytz:  Timezone for displaying date
Output:
        @displaydt :  Date time in context of source
        is_DST      : set 1 when output is in daylight savings time
        Abbreviation: Timezone abbreviation
        Offset:     GMT offset of displaytzn
*/
SET @sourcetzn = 'America/New_York';
SET @basetzn = 'America/Los_Angeles';
SET @displaytzn = 'America/Chicago';
SET @sourcedt = '2015-07-25 21:33:00';
SET @basedt = CONVERT_TZ(@sourcedt,@sourcetzn,@basetzn);
SET @displaydt = CONVERT_TZ(@basedt,@basetzn, @displaytzn);
SET @utime = unix_timestamp(@basedt);

SELECT
@displaydt,ztt.Abbreviation,ztt.Is_DST,ztt.`Offset`
FROM  mysql.`time_zone_name` tzn
JOIN    mysql.time_zone_transition_type ztt ON ztt.Time_zone_id=tzn.Time_zone_id
INNER JOIN mysql.time_zone_transition tzt
ON tzt.Time_zone_id = ztt.Time_zone_id
AND tzt.Transition_type_id = ztt.Transition_type_id
where tzn.Name = @displaytzn
and  @utime >   tzt.Transition_time 
order by Transition_time desc
LIMIT 1;

您是否已将上述表添加到MySQL实例中?它们是MyISAM,所以您所要做的就是将它们复制到Windows上的数据目录中,它们应该显示在添加表的数据库下。然后可以使用simple
showcreatetablename
查看结构,或使用其他工具检查表的组成。@N.B.没有人提到Windows…可能重复感谢Pekka。我们考虑过这一点。出于显示目的,仍然需要解决此问题。对于DATETIME,您需要有一个应用程序级别的约定,约定所隐含的时区。使用UTC是一种可行的约定。相反,我们选择存储呈现给我们的日期时间,并将时区上下文存储在成对的VARCHAR字段中。这将保留输入而不进行转换。
timestamp
方法@Pekka웃 这就是解决这个问题的方法。您在UTC中存储,在UTC中检索,在UTC中交付。如果出于任何原因必须执行时区转换,请在需要时执行。这样你就省去了很多你根本不知道的麻烦。问题不仅仅在于提取数据并对其进行格式化,那么如何使用日期范围查询数据呢?出于显示目的-您可以提取数据,获得用户的时区信息,只需在输出点从UTC>所需时区转换即可。没有提供时区,没有转换。您是否已将上述表添加到MySQL实例中?它们是MyISAM,所以您所要做的就是将它们复制到Windows上的数据目录中,它们应该显示在添加表的数据库下。然后可以使用simple
showcreatetablename
查看结构,或使用其他工具检查表的组成。@N.B.没有人提到Windows…可能重复感谢Pekka。我们考虑过这一点。出于显示目的,仍然需要解决此问题。对于DATETIME,您需要有一个应用程序级别的约定,约定所隐含的时区。使用UTC是一种可行的约定。相反,我们选择存储呈现给我们的日期时间,并将时区上下文存储在成对的VARCHAR字段中。这将保留输入而不进行转换。
timestamp
方法@Pekka웃 这就是解决这个问题的方法。您在UTC中存储,在UTC中检索,在UTC中交付。如果出于任何原因必须执行时区转换,请在需要时执行。这样你就省去了很多你根本不知道的麻烦。问题不仅仅在于提取数据并对其进行格式化,那么如何使用日期范围查询数据呢?出于显示目的-您可以提取数据,获得用户的时区信息,只需在输出点从UTC>所需时区转换即可。没有提供时区,没有转换。