Ten eerste heb ik hier eerder uitgebreid over geschreven, dus lees mijn antwoorden hier en hier , evenals deze blogpost van Lau Taarnskov .
Specifiek met betrekking tot MySQL, wil je over het algemeen geen TIMESTAMP
. gebruiken veld voor de lokale tijd van een toekomstige gebeurtenis, omdat het tijdens het schrijven van de tijdzone van de sessie naar UTC wordt geconverteerd en tijdens het lezen van UTC naar de tijdzone van de sessie wordt teruggezet. Zelfs als dit dezelfde tijdzone-ID's zijn (wat niet hoeft te zijn), is er geen garantie dat de tijdzonegegevens niet veranderen voor een of beide tijdzones tussen het moment waarop u de gegevens schrijft en het moment waarop de gebeurtenis plaatsvindt. vindt plaats.
Gebruik in plaats daarvan een DATETIME
veld, dat geen impliciete tijdzoneconversies uitvoert. Je krijgt de exacte waarde die je hebt geschreven. Sla de lokale tijd van de gebeurtenis op en sla een VARCHAR
. op veld met de tijdzone-ID voor de gebeurtenis. Dit is de enige manier om de oorspronkelijke bedoeling van de gebruiker te behouden.
De grondgedachte en randgevallen worden allemaal beschreven in de antwoorden die ik eerder heb gegeven.