我需要将我们的MySQL(InnoDB)数据库中的某些TIMESTAMP字段转换为INT。我意识到将TIMESTAMP转换为INT是不寻常的,但我们仍然需要这样做:)将TIMESTAMP转换为INTEGER的Mysql - 时区
它似乎很直接,但有一些时区和夏令时错误。
我有一个脚本,每列生成我的SQL代码。例如,它产生:
ALTER TABLE alarmLog ADD COLUMN started_tmp INT UNSIGNED;
UPDATE alarmLog SET started_tmp = UNIX_TIMESTAMP(started);
ALTER TABLE alarmLog DROP started;
alter TABLE alarmLog CHANGE started_tmp started INT UNSIGNED NULL DEFAULT 0;
如果我之前和使用select FROM_UNIXTIME(1291788036);
,结果看起来不错的数据后进行比较。
然后这个想法是改变所有的客户端软件转换为UTC,并在存储它时使用INT。检索时,该INT将转换为当前时区。
但随后的文档warn me有关此方案(在CET夏令):
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 02:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 03:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
如何API和操作系统的正常处理夏令?我知道我的个人电脑有UTC时钟,夏令时,操作系统增加了两个小时,冬天时间增加了一个小时。我假设它使用UTC时间来确定它是否是DST。
那么,我该如何处理?是唯一向数据库添加字段以指定DST偏移量的解决方案吗?
夏令时是一个不同的时区。例如。 CET是中欧时间,CEST是中欧夏令时。您的操作系统知道何时切换。只要您使用UTC来表示时间戳,就由表示层将其转换为本地时间。 –