Nejprve jsem o tom již dříve psal obsáhle podrobně, takže si mé odpovědi přečtěte zde a zde , a také tento blogový příspěvek od Lau Taarnkova .
Pokud jde o MySQL, obecně nechcete používat TIMESTAMP
pole pro místní čas budoucí události, protože se převede z časového pásma relace na UTC v době zápisu a zpět z UTC na časové pásmo relace v čase čtení. I když se jedná o stejná ID časových pásem (což nemusí být), nelze zaručit, že se data časového pásma nezmění pro jedno nebo obě časová pásma mezi okamžikem zápisu dat a událostí se koná.
Místo toho použijte DATETIME
pole, které neprovádí žádné implicitní převody časových pásem. Dostanete přesnou hodnotu, kterou jste napsal. Uložte místní čas události a uložte VARCHAR
pole obsahující identifikátor časové zóny pro událost. Toto je jediný způsob, jak zachovat původní záměr uživatele.
Odůvodnění a okrajové případy jsou všechny popsány v odpovědích, které jsem uvedl dříve.