正在查找MYSQL时区表的描述
在过去的一个小时里,我一直在尝试不同的谷歌搜索,但我找不到任何关于MYSQL时区表的详细描述。我已经看过了,但这还不足以让我弄明白(至少到目前为止) 我不介意阅读手册,但有人能给我指出一本描述这些表格结构的手册吗 然后我想生成SQL,它可以采用时区名称并生成时区缩写。然后是从缩写和国家代码到时区名称的倒转。我发现了一些建议使用的SQL来实现这些功能,但如果不了解它们访问的表,我会犹豫是否使用这些SQL正在查找MYSQL时区表的描述,mysql,timezone,Mysql,Timezone,在过去的一个小时里,我一直在尝试不同的谷歌搜索,但我找不到任何关于MYSQL时区表的详细描述。我已经看过了,但这还不足以让我弄明白(至少到目前为止) 我不介意阅读手册,但有人能给我指出一本描述这些表格结构的手册吗 然后我想生成SQL,它可以采用时区名称并生成时区缩写。然后是从缩写和国家代码到时区名称的倒转。我发现了一些建议使用的SQL来实现这些功能,但如果不了解它们访问的表,我会犹豫是否使用这些SQL /* Input: sourcedt : Input datetime string in
/*
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上的数据目录中,它们应该显示在添加表的数据库下。然后可以使用simpleshowcreatetablename
查看结构,或使用其他工具检查表的组成。@N.B.没有人提到Windows…可能重复感谢Pekka。我们考虑过这一点。出于显示目的,仍然需要解决此问题。对于DATETIME,您需要有一个应用程序级别的约定,约定所隐含的时区。使用UTC是一种可行的约定。相反,我们选择存储呈现给我们的日期时间,并将时区上下文存储在成对的VARCHAR字段中。这将保留输入而不进行转换。timestamp
方法@Pekka웃 这就是解决这个问题的方法。您在UTC中存储,在UTC中检索,在UTC中交付。如果出于任何原因必须执行时区转换,请在需要时执行。这样你就省去了很多你根本不知道的麻烦。问题不仅仅在于提取数据并对其进行格式化,那么如何使用日期范围查询数据呢?出于显示目的-您可以提取数据,获得用户的时区信息,只需在输出点从UTC>所需时区转换即可。没有提供时区,没有转换。