-
Normalerweise sollten Sie beides nicht tun:Die Datentypen in der Datenbankschicht sollten (möglichst) für sich allein aussagekräftig sein und nicht von Ihrer Anwendung abhängen, um sie zu interpretieren. Wie @Jim DeLaHunt sagt , dies ermöglicht der Datenbank, sie nach Bedarf einfach von SQL aus zu manipulieren/interpretieren (und ermöglicht Ihnen auch, in Zukunft problemlos auf dieselben Daten von einer anderen Anwendungscodebasis zuzugreifen).
MySQL hat fünf temporale Typen , von denen nur zwei sowohl ein Datum als auch eine Uhrzeit speichern:
DATETIME
undTIMESTAMP
.Wie andere angedeutet haben, hängt der Unterschied davon ab, ob Sie die Zeitzone speichern möchten - obwohl ich das für eine ziemlich verwirrende Sichtweise halte:
-
TIMESTAMP
verwendet dietime_zone
der Sitzung Variable zum Konvertieren der Eingabe in einen UTC-Zeitstempel und dann wieder zurück für die Ausgabe:Sie ist nützlich, um einen genauen Zeitpunkt anzugeben; -
DATETIME
speichert einfach das Datum und die Uhrzeit ohne Berücksichtigung der Zeitzone, ähnlich wie das Fotografieren eines Kalenders und einer Uhr:Es ist nützlich, um ein Ereignis anzugeben, das weltweit zur gleichen Ortszeit stattfindet.
-
-
Genauso wie Sie jede andere Spalte deklarieren würden, geben Sie den entsprechenden Datentyp nach dem Spaltennamen an.
Beachten Sie, dass
TIMESTAMP
hat zusätzliche Funktionen, wie z. B. automatische Aktualisierung , die Sie ggf. in Ihrer Spaltendeklaration deaktivieren möchten. -
Mit einem der oben genannten Zeittypen können Sie all dies tun (mithilfe von Datumsfunktionen nach Bedarf). Die Standardausgabe von
TIMESTAMP
undDATETIME
Typen ist ein String in'YYYY-MM-DD HH:MM:SS'
formatieren.Insbesondere die "verstrichene Zeit" aus dem Vergleich zweier Werte könnte beispielsweise mit MySQLs
TIMEDIFF()
Funktion:SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...