MySQL Datetime vs Timestamp-Spaltentypen

Lesezeit ca. 3 Min.

Einige MySQL-Datentypen sind auf den ersten Blick etwas verwirrend. Ohne die Dokumentation durchzulesen (und manchmal sogar nach dem Lesen), ist es schwer herauszufinden, welcher Datentyp der richtige für Deine aktuellen Bedürfnisse ist. Dieser Frage widmet sich dieser Artikel.

DATETIME und TIMESTAMP

Du musst also Datums- und Zeitangaben speichern, fragst Dich aber, welchen Datentyp Du in MySQL verwenden sollst – DATETIME oder TIMESTAMP? Die Antwort ist – es hängt von Deinen Bedürfnissen ab.

Schauen wir uns zuerst die offizielle Dokumentation von MySQL an, um zu sehen, was MySQL über beide zu sagen hat, und dann schauen wir uns die praktische Verwendung für jeden von ihnen an.

„The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD hh:mm:ss' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.“

Auf Deutsch:

„Der Typ DATETIME wird für Werte verwendet, die sowohl Datums- als auch Zeitteile enthalten. MySQL ruft DATETIME-Werte im Format ‚JJJJ-MM-TT hh:mm:ss‘ ab und zeigt sie an. Der unterstützte Bereich ist ‚1000-01-01 00:00:00‘ bis ‚9999-12-31 23:59:59‘.“

„The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.“

Auf Deutsch:

„Der Datentyp TIMESTAMP wird für Werte verwendet, die sowohl Datums- als auch Zeitanteile enthalten. TIMESTAMP hat einen Bereich von ‚1970-01-01 00:00:01‘ UTC bis ‚2038-01-19 03:14:07‘ UTC.“

Inwiefern sind sie unterschiedlich?

Nun, ich bin froh, dass ich die oben erwähnte Dokumentation gelesen habe, denn sie sehen, hmmm, gleich aus. Aber, wenn Du diese Dokumentationsseite weiter liest, wirst Du schließlich zu diesem Teil gelangen:

„MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.)“

Auf Deutsch:

„MySQL konvertiert TIMESTAMP-Werte von der aktuellen Zeitzone in UTC für die Speicherung und zurück von UTC in die aktuelle Zeitzone für den Abruf. (Dies geschieht nicht für andere Typen wie DATETIME).“

Wie wirkt sich dies also auf Deine Implementierung aus und ob Du DATETIME oder TIMESTAMP als Datentyp wählen solltest?

Wie oben erwähnt, werden bei Verwendung des Datentyps TIMESTAMP die Werte von der Datenbank in UTC (universelle Zeitzone) konvertiert und in dieser Zeitzone gespeichert. Das bedeutet, dass beim Abrufen (SELECT) dieser Daten eine Konvertierung von UTC in die aktuelle Zeitzone durchgeführt wird, und erst dann werden die Daten zurückgegeben. Dieses Verhalten tritt für DATETIME gespeicherte Werte nicht auf.

Praktische Anwendungen

Wenn Du Kunden in verschiedenen Ländern mit unterschiedlichen Anwendungsinstanzen bedienst, kannst Du mit TIMESTAMP die gleichen Datums- und Zeitdaten in verschiedenen Zeitzonen direkt aus der Datenbank verwenden.

Bitte beachte, dass die angewandte Zeitzone standardmäßig die Zeitzone des Servers ist. Du kannst die Zeitzone für jede Verbindung einzeln einstellen, wenn Du sie ändern möchtest. Zum Beispiel SET Zeit_Zone = ‚-8:00‘; .

Zusammenfassend lässt sich sagen, dass Du, wenn Du Deine Datums- und Zeitdaten unabhängig von Zeitzonen auf die gleiche Weise bereitstellen willst, den DATETIME-Typ verwenden kannst (der es Dir auch erlaubt, alle in MySQL eingebauten Datums- und Typ-Funktionen zu benutzen). Andernfalls kannst Du TIMESTAMP verwenden und die Daten auf einer Zeitzonen-Basis bereitstellen.

Quelle:

https://dev.mysql.com/doc/refman/8.0/en/datetime.html

Ähnliche Artikel:

Fragen oder Feedback zu diesem Artikel

Deine E-Mail-Adresse wird nicht veröffentlicht.