sql >> Databáze >  >> RDS >> Mysql

Jak uložit budoucí(!) data do databáze

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.



  1. Jak mohu nechat MySQL protokolovat naplánované události?

  2. PHP PDO bindParam() a MySQL BIT

  3. T-SQL rozdělený řetězec na základě oddělovače

  4. vytváření funkce časového pásma ve webové aplikaci PHP