3170 Stimmen

Sollte ich in MySQL den Datentyp datetime oder timestamp verwenden?

Würden Sie die Verwendung eines datetime oder eine Zeitstempel Feld und warum (unter Verwendung von MySQL)?

Ich arbeite mit PHP auf der Serverseite.

2 Stimmen

Hier finden Sie einige wichtige Informationen codeproject.com/Tipps/1215635/MySQL-DATETIME-vs-TIMESTAMP

11 Stimmen

Wenn Sie möchten, dass Ihre Anwendung im Februar 2038 unterbrochen wird, verwenden Sie timestamp. Prüfen Sie den Datumsbereich.

0 Stimmen

Wenn auch nur die geringste Möglichkeit besteht, dass Ihre Datenbank Werte in einer anderen Zeitzone speichern oder Verbindungen von einer Anwendung in einer anderen Zeitzone empfangen muss, sollten Sie ISO-8601 CHARs für alle wichtigen Zeitstempel verwenden. Siehe diese Frage: stackoverflow.com/questions/40670532/

55voto

ianaré Punkte 3070

Das hängt wirklich von der Anwendung ab.

Nehmen wir an, ein Benutzer setzt einen Zeitstempel für einen Termin in Sanghai an einen Server in New York. Wenn sich der Benutzer nun in Sanghai anmeldet, greift er auf denselben Zeitstempel für den Termin von einem gespiegelten Server in Tokio zu. Er sieht den Termin in der Tokioter Zeit, die von der ursprünglichen New Yorker Zeit abweicht.

Für Werte, die die Benutzerzeit darstellen, wie z. B. einen Termin oder einen Zeitplan, ist datetime besser geeignet. Es ermöglicht dem Benutzer, unabhängig von den Servereinstellungen das genaue Datum und die Uhrzeit zu bestimmen. Die eingestellte Zeit ist die eingestellte Zeit, die nicht von der Zeitzone des Servers, der Zeitzone des Benutzers oder von Änderungen bei der Berechnung der Sommerzeit beeinflusst wird (ja, sie ändert sich).

Für Werte, die die Systemzeit darstellen, wie Zahlungstransaktionen, Tabellenänderungen oder Protokollierung, sollten Sie hingegen immer Zeitstempel verwenden. Das System wird nicht beeinträchtigt, wenn der Server in eine andere Zeitzone verlegt wird oder wenn ein Vergleich zwischen Servern in verschiedenen Zeitzonen stattfindet.

Zeitstempel belasten auch die Datenbank weniger und werden schneller indiziert.

0 Stimmen

Ihre Anwendung sollte sich nicht auf die Zeitzone des Servers verlassen. Eine Anwendung sollte IMMER die Zeitzone in der Sitzung der von ihr verwendeten Datenbankverbindung auswählen, bevor sie eine Abfrage stellt. Wenn eine Verbindung von mehreren Benutzern gemeinsam genutzt wird (z. B. eine Webanwendung), verwenden Sie UTC und führen Sie die Zeitzonenumwandlung auf der Rendering-Seite durch.

52voto

Sebastien Horin Punkte 9939

2016 + Ich empfehle, die Mysql-Zeitzone auf UTC einzustellen und DATETIME zu verwenden:

Jedes aktuelle Frontend-Framework (Angular 1/2, React, Vue,...) kann einfach und automatisch Ihre UTC-Datumszeit in die lokale Zeit umwandeln.

Zusätzlich:

(Es sei denn, Sie werden die Zeitzone Ihrer Server ändern)


Beispiel mit AngularJs

// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...

// font-end Output the localised time
{{item.my_datetime | date :'medium' }}

Alle lokalisierten Zeitformate sind hier verfügbar: https://docs.angularjs.org/api/ng/filter/date

11 Stimmen

Ihre Daten sollten nicht an die Zeitzoneneinstellungen Ihrer Server gebunden sein. Vielleicht funktioniert es bei Ihnen, wenn Sie eine einzige MySql-Box unter Ihrem Schreibtisch haben

43voto

Sobes Punkte 439

TIMESTAMP ist immer in UTC (d.h. verstrichene Sekunden seit 1970-01-01, in UTC), und Ihr MySQL-Server konvertiert es automatisch in das Datum/die Uhrzeit für die Zeitzone der Verbindung. Langfristig gesehen ist TIMESTAMP die beste Lösung, weil Sie wissen, dass Ihre zeitlichen Daten immer in UTC sein werden. So werden Ihre Daten nicht durcheinander gebracht, wenn Sie beispielsweise auf einen anderen Server umziehen oder die Zeitzoneneinstellungen auf Ihrem Server ändern.

Hinweis: Die Standardzeitzone für die Verbindung ist die Zeitzone des Servers, aber diese kann (sollte) pro Sitzung geändert werden (siehe SET time_zone = ... ).

42voto

Jeff Warnica Punkte 762

A timestamp ist ein Spezialfall des Feldes datetime Feld. Sie können erstellen timestamp Spalten besondere Eigenschaften haben; sie kann so eingestellt werden, dass sie sich entweder beim Erstellen und/oder Aktualisieren selbst aktualisiert.

In Bezug auf "größere" Datenbanken, timestamp hat eine Reihe von Auslösern für besondere Fälle.

Welcher der richtige ist, hängt ganz davon ab, was Sie tun wollen.

8 Stimmen

Nein, der Unterschied ist nicht nur "ein Sonderfall". Denn die Zeitzonen der Sitzung, in der die Werte festgelegt/abgefragt werden, sind unterschiedlich betroffen.

36voto

Dehan Punkte 4028

Vergleich zwischen DATETIME, TIMESTAMP und DATE

enter image description here

Was ist das [.fraction]?

  • Ein DATETIME- oder TIMESTAMP-Wert kann eine nachgestellte Nachkommastelle enthalten Sekundenbruchteil mit einer Genauigkeit von bis zu Mikrosekunden (6 Ziffern) enthalten. In Insbesondere wird jede Nachkommastelle in einem Wert, der in eine DATETIME oder TIMESTAMP-Spalte eingefügten Wertes wird gespeichert, anstatt verworfen zu werden. Dies ist natürlich optional.

Quellen:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X