Würden Sie die Verwendung eines datetime oder eine Zeitstempel Feld und warum (unter Verwendung von MySQL)?
Ich arbeite mit PHP auf der Serverseite.
Würden Sie die Verwendung eines datetime oder eine Zeitstempel Feld und warum (unter Verwendung von MySQL)?
Ich arbeite mit PHP auf der Serverseite.
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.
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.
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
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 = ...
).
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.
Vergleich zwischen DATETIME, TIMESTAMP und DATE
Was ist das [.fraction]?
Quellen:
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.
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/
0 Stimmen
Datetime ist völlig nutzlos . es ist nur ein dummer String. timestamp ist in jeder Hinsicht perfekt sondern sie endet im Jahr 2038.