MySQL Datetime versus Zeitstempel-Datentypen

Die zeitlichen Datentypen in MySQL können verwirrend sein. Dieses Beispiel und diese Diskussion helfen hoffentlich die Unterschiede in den Datentypen Zeitstempel und Datetime zu erklären.

Aus der MySQL-Referenz:

Der DATETIME-Typ wird für Werte verwendet, die Datums- und Uhrzeitteile enthalten. MySQL ruft DATETIME-Werte im Format 'JJJJ-MM-TT HH: MM: SS' ab und zeigt sie an. Der unterstützte Bereich liegt zwischen '1000-01-01 00:00:00' und '9999-12-31 23:59:59'.

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

Ein Hauptunterschied zwischen diesen beiden Datentypen besteht darin, dass die Werte des TIMESTAMP-Datentyps zu Speicherzwecken von der aktuellen Zeitzone in UTC und bei Verwendung von UTC in die aktuelle Zeitzone zurück konvertiert werden. Die Werte für den Datetime-Datentyp bleiben in Bezug auf die Zeitzone unverändert.

Dieses Beispiel ist eine gute Übung, um den Unterschied zwischen diesen beiden Datentypen zu demonstrieren.

mysql> zeige Variablen wie '% time_zone%'; + ------------------ + --------------------- + | Variablenname | Wert | + ------------------ + --------------------- + | system_time_zone | Indien-Standardzeit | | time_zone | Asien / Kalkutta | + ------------------ + --------------------- + 2 Reihen in Satz (0,00 s)


Sie können unsere aktuellen Zeitzoneninformationen anzeigen. Lassen Sie uns in dieser Umgebung eine Tabelle mit den beiden Datentypen erstellen und sie mit denselben zeitlichen Informationen füllen.

create table datedemo (wartezeit datetime, mytimestamp timestamp); Abfrage OK, 0 Zeilen betroffen (0,05 Sek.)
füge in datedemo Werte ein ((now ()), (now ())); Abfrage OK, 1 Zeile betroffen (0,02 Sek.)
wähle * aus datiertemo; + --------------------- + --------------------- + | mydatetime | mytimestamp | + --------------------- + --------------------- + | 2011-08-21 14:11:09 | 2011-08-21 14:11:09 | + --------------------- + --------------------- + 1 Reihe im Set ( 0,00 sec)


Zu diesem Zeitpunkt haben die Datentypen datetime und timestamp dieselben Werte. Lassen Sie uns die Zeitzone ändern und die Ergebnisse sehen.

SET TIME_ZONE = "america / new_york"; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
 wähle * aus datiertemo; + --------------------- + --------------------- + | mydatetime | mytimestamp | + --------------------- + --------------------- + | 2011-08-21 14:11:09 | 2011-08-21 04:41:09 | + --------------------- + --------------------- + 1 Reihe im Set ( 0,00 sec)


Das obige Beispiel zeigt, wie der Datumstyp TIMESTAMP die Werte geändert hat, nachdem die Zeitzone in 'america / new_work' geändert wurde, wobei DATETIME unverändert ist.