Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So speichern Sie zukünftige(!) Daten in einer Datenbank

Erstens habe ich bereits ausführlich darüber geschrieben, also lesen Sie bitte meine Antworten hier und hier , sowie dieser Blogbeitrag von Lau Taarnskov .

In Bezug auf MySQL möchten Sie im Allgemeinen keinen TIMESTAMP verwenden Feld für die lokale Zeit eines zukünftigen Ereignisses, da es zum Zeitpunkt des Schreibens von der Zeitzone der Sitzung in UTC und zum Zeitpunkt des Lesens von UTC zurück in die Zeitzone der Sitzung konvertiert wird. Selbst wenn es sich um die gleichen Zeitzonen-IDs handelt (was nicht zwingend sein muss), gibt es keine Garantie dafür, dass sich die Zeitzonendaten für eine oder beide Zeitzonen zwischen dem Schreiben der Daten und dem Ereignis nicht ändern stattfindet.

Verwenden Sie stattdessen ein DATETIME -Feld, das keine impliziten Zeitzonenkonvertierungen durchführt. Sie erhalten genau den Wert, den Sie geschrieben haben. Speichern Sie die Ortszeit des Ereignisses und speichern Sie einen VARCHAR Feld, das die Zeitzonenkennung für das Ereignis enthält. Nur so kann die ursprüngliche Absicht des Benutzers beibehalten werden.

Gründe und Grenzfälle sind alle in den Antworten beschrieben, die ich zuvor gegeben habe.