it-swarm.com.de

Wann wird Datum / Uhrzeit oder Zeitstempel verwendet?

Ich habe danach gesucht, aber keine eindeutigen Antworten (vor allem bei letzteren). In welchen Fällen sollten Sie einen Datums- oder Zeitstempel verwenden?

68
James P.

Angenommen, Sie verwenden MS SQL Server (was Sie nicht sind, finden Sie im Update unten ):

Eine Tabelle kann nur eine Zeitstempelspalte haben. Der Wert in der Timestamp-Spalte wird jedes Mal aktualisiert, wenn eine Zeile mit einer Timestamp-Spalte eingefügt oder aktualisiert wird. Diese Eigenschaft macht eine Timestamp-Spalte zu einem schlechten Kandidaten für Schlüssel, insbesondere für Primärschlüssel. Bei jeder Aktualisierung der Zeile wird der Zeitstempelwert und damit der Schlüsselwert geändert. Wenn sich die Spalte in einem Primärschlüssel befindet, ist der alte Schlüsselwert nicht mehr gültig und Fremdschlüssel, die auf den alten Wert verweisen, sind nicht mehr gültig. Wenn in einem dynamischen Cursor auf die Tabelle verwiesen wird, ändern alle Aktualisierungen die Position der Zeilen im Cursor. Befindet sich die Spalte in einem Indexschlüssel, generieren alle Aktualisierungen der Datenzeile auch Aktualisierungen des Index.

Informationen zu MSDN

Wenn Sie Datums-/Uhrzeitinformationen für eine Zeile speichern müssen und diese Datums-/Uhrzeitänderung nicht haben, verwenden Sie DateTime. Andernfalls verwenden Sie Timestamp.

Beachten Sie auch: MS SQL Server-Zeitstempelfelder sind weder Datum noch Uhrzeit. Sie sind binäre Darstellungen der relativen Reihenfolge, in der die Daten geändert wurden.

Aktualisieren

Wie Sie aktualisiert haben, um MySQL zu sagen:

TIMESTAMP-Werte werden zum Speichern von der aktuellen Zeitzone in UTC konvertiert und zum Abrufen von UTC zurück in die aktuelle Zeitzone konvertiert. (Dies tritt nur für den TIMESTAMP-Datentyp auf, nicht für andere Typen wie DATETIME.)

Zitat aus MySQL-Referenz

Insbesondere:

Wenn Sie einen TIMESTAMP-Wert speichern, dann die Zeitzone ändern und den Wert abrufen, unterscheidet sich der abgerufene Wert von dem von Ihnen gespeicherten Wert.

Wenn Sie also eine Anwendung in mehreren Zeitzonen verwenden und das Datum und die Uhrzeit benötigen, um die Einstellungen der einzelnen Benutzer widerzuspiegeln, verwenden Sie Timestamp. Wenn Sie unabhängig von der Zeitzone Konsistenz benötigen, verwenden Sie Datetime

66
Jaymz

Siehe Soll ich das Feld 'datetime' oder 'timestamp' verwenden? Es wird umfassend über das Thema berichtet.

EDIT - Nur um Eigenschaften für MySQL und meine Erfahrung mit it- zusammenzufassen

Zeitstempel -

a) 4 Bytes pro Spalte (im Vergleich zu 8 für datetime)

  • NIEDRIGERER BEREICH ('1970-01-01 00:00:01' UTC bis '2038-01-09 03:14:07' UTC) ALS DATETIME - Verwenden Sie ihn also definitiv nicht für Geburtsdaten usw. Die meisten Verwendungsmuster sind zu Geben Sie tatsächlich einen "Zeitstempel" von "JETZT" für Aktivitäten wie Zeilenaktualisierungen usw. usw. an.

b) intern als ganze Zahl gespeichert

  • In Bezug auf die Leistung war meine persönliche Erfahrung mehrdeutig. Manchmal ist es schneller, manchmal langsamer als DATETIME. Es nimmt jedoch weniger Platz in Anspruch.

c) Hat Zeitzoneninformationen!

  • also - wenn ich '2011-01-01 3:30' in TIMESTAMP hinzufüge (mit aktueller Zeitzone als EST - Boston) .. später ändere ich den Server & MySQL-Zeitzone in PST (Kalifornien) und starte den Server neu - der Wert ändert sich zu '2011-01-01 00:00' - (BITTE BESTÄTIGEN ... ich hatte dies vor langer Zeit getestet). DATETIME bleibt jedoch gleich.

d) Alle Funktionen von DATE ()/DAY ()/MONTH () funktionieren sowohl für TIMESTAMP als auch für DATETIME .

e) In MySQL können Sie mehrere TIMESTAMPS pro Tabelle haben

  • (JA, jedoch wird nur einer von ihnen (der erste) automatisch mit der Zeit der Zeilenaktualisierung aktualisiert, auch ... nur einer kann NICHT NULL gemacht werden (denke den ersten))

f) Der erste TIMESTAMP in einer Tabelle wird automatisch aktualisiert ...

  • seien Sie also vorsichtig, wenn Sie es für einen anderen Zweck verwenden .. und dort Nullen zulassen möchten. (null gespeichert als '0000-00-00 00:00:00' in DATETIME und TIMESTAMP)

Ich habe mehrere Zeitstempel für andere Zwecke verwendet. Der Platz wurde gespart (ich musste sehr vorsichtig sein und all diese Probleme berücksichtigen.

Mein Rat, gehen Sie für TIMESTAMP für Nicht-Timestamp-Zwecke nur, wenn Sie wissen, was Sie tun .. und wenn SPACE ein großes Problem ist (meine zB - 15.000.000 Zeilen und wachsende und 8 Zeitpunkte!)

30
Jai

Ich habe Ihre Frage nicht klar bekommen, aber siehe unten Link. es kann dir helfen

http://www.sqlteam.com/article/timestamps-vs-datetime-data-types

5
  • In MySQL können Sie unter DateTime mit DATE() verwandten Funktionen arbeiten, unter timestamp dagegen nicht.
  • Timestamp kann keine Werte vor 01-01-1970 enthalten.
  • Außerdem hält einer von ihnen die Sommerzeit und andere nicht (ich erinnere mich nicht, welche gerade)

Ich neige dazu, immer DateTime zu wählen.

2

Datenbankserver muss angegeben werden.

Einige Server-Engines aktualisieren die Zeitstempelfelder automatisch, sodass sie als Datensatzversion in Optimistic Locking verwendet werden können

2
sehe