我需要將我們的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來表示時間戳,就由表示層將其轉換爲本地時間。 –