MySQL - jak przechowywać czas z prawidłową strefą czasową? (z Java)

Używam MySQL 5.0. Muszę przechowywać informacje o dacie i godzinie w jednej kolumnie. Chcę użyćDATETIME lubTIMESTAMP typ kolumny. Ale mam problem ze zmianą czasu letniego na zimowy.

Moja strefa czasowa to CET. Latem używamy czasu letniego (CEST, GMT + 2), a zimą używamy czasu zimowego (CET, GMT + 1). W dniu, w którym czas letni zmienia się w czas zimowy (w tym roku 2012 r. Był 28 października), mamy 2:00 czasu dwa razy. Kolejność tego dnia to:

... -> 1:00 CEST -> 2:00 CEST -> 2:00 CET (= 3:00 CEST) -> 3:00 CET -> ...

Jeśli więc mam znacznik czasu / datetime '2012-10-28 02:00:00', nie jestem w stanie powiedzieć poprawnie, jeśli ten czas reprezentuje 2:00 AM w okresie letnim lub zimowym.

Mam dwie różne daty Java:

Date d1 = new Date(1351382400000); // 2:00 CEST (summer-time)
Date d2 = new Date(1351386000000); // 2:00 CET (winter-time)

A kiedy przechowuję je w bazie danych przy użyciu standardowego formatu datownika / datetime (tj.'yyyy-MM-dd HH:mm:ss'), obie przechowują te same dane „2012-10-28 02:00:00”. Ale kiedy przywrócę te wartości z bazy danych do zmiennych Date, otrzymam dwie takie same daty. Tak więc daty wprowadzenia były różne, ale daty wyjściowe są równe.
To samo dzieje się, gdy używamFROM_UNIXTIME funkcja do przechowywania wartości daty:FROM_UNIXTIME(1351382400) iFROM_UNIXTIME(1351386000). Wartości są przechowywane w kolumnie bazy danych (typ DATETIME lub TIMESTAMP) jako równe wartości. Kiedy więc otrzymam te wartości do obiektu Date Javy, otrzymuję ponownie dwie równe daty (w okresie zimowym).

Czy jest jakiś sposób na przechowywanie strefy czasowej w MySQL lub jak obsługiwać informacje o strefie czasowej w kolumnach DATETIME / TIMESTAMP?
Oczywiście mogę przechowywać wartości BIGINT w bazie danych z datownikiem unix. Ale zastanawiam się, czy jest jakikolwiek sposób, aby rozwiązać ten problem z dowolnym typem daty i godziny MySQL.

Każda pomoc lub sztuczka jest doceniana ... :)

Wielkie dzięki.

Honza (sporak)

EDYCJA # 1:
Jeśli próbowałem zapisać wartości znacznika czasu, a następnie pobrać wartości datownika do daty java, ponownie otrzymuję błąd Data. Powiedzmy, że mam prostą tabelę z kolumną TIMESTAMP. Przechowuję dane w tej tabeli w ten sposób:

mysql> INSERT INTO `tab` (timestamp_column) VALUES 
          (FROM_UNIXTIME(1351382400)),  // 2:00 CEST (summer-time)
          (FROM_UNIXTIME(1351386000));  // 2:00 CET (winter-time)
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Kiedy pobieram te wiersze do obiektu Date Java, otrzymuję dwie takie same daty, które pokazują 2:00 CET. A co więcej - gdy pobieram te wiersze w MySQL, ponownie otrzymuję błędne wartości w MySQL:

mysql> SELECT UNIX_TIMESTAMP(timestamp_column) from tab;
+--------------------+
| UNIX_TIMESTAMP(ts) |
+--------------------+
|         1351386000 | 
|         1351386000 | 
+--------------------+
2 rows in set (0.00 sec)

Tak więc TIMESTAMP wydaje mi się mało przydatny.

questionAnswers(3)

yourAnswerToTheQuestion