2010-03-28 2 views
19

Wahrscheinlich wollen viele Programmierer diese Frage stellen. Es ist der Vorteil eines jeden dieser MySQL-Zeitformate. und welches du es bevorzugst, es in deinen apps zu verwenden.MySQL: Was ist das beste zu verwenden, Unix TimeStamp oder DATETIME

Für mich benutze ich Unix Timestamp, weil ich finde es leicht zu & Datensätze mit ihm zu konvertieren, und auch, weil ich nie versucht, die DATETIME-Sache. aber sowieso bin ich bereit, meine Meinung zu ändern, wenn mir jemand sagt, dass ich falsch liege.

Dank

+0

Ähnlich: http://stackoverflow.com/questions/409286/datetime-vs-timestamp –

Antwort

16

Timestamp (beide PHP Einsen und Einsen des MySQL) werden 32 Bit gespeichert ist (d.h. 4 Bytes) ganze Zahlen sind; das heißt, sie sind mit einem Datumsbereich beschränkt, die aus dem Jahr 1970 geht 2038.

DATETIME nicht über diese Einschränkung - aber gespeichert werden mehr Bytes mit (8 Byte, wenn ich mich nicht irre)


Nachdem zwischen Zeitstempel zu speichern, wie durch PHP zu sehen ist, oder Zeitstempel, wie durch MySQL gesehen:


Und für weitere Informationen zwischen MySQL TIMESTAMP und DATETIME Datentypen, siehe 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

+3

Sie sind begrenzt _now_ auf 32 Bits :) –

+4

Wer verwendet 32-Bit-Systeme in 2038? –

+0

'new java.util.Date(). GetTime()' ist bereits 64-Bit. – osa

1

Sofern Aufzeichnungen vor dem 1. Januar 1970 zu digitalisieren, Ich mag die UNIX-Epoche. Es ist nur eine Frage der Präferenz, ganze Zahlen ohne Vorzeichen sind einfacher zu handhaben, wenn mehrere Sprachen verwendet werden.

Denken Sie daran, die Epoche beginnt am 1. Januar 1970. Viele Unternehmen waren schon Jahrzehnte, wenn nicht länger, im Geschäft.

+0

Unix-Zeitstempel, in einer 32-Bit-Ganzzahl mit Vorzeichen, können Daten bis 1901 speichern, da sie von -2147483647 (13. Dezember 1901 8:45:53 UTC) bis 2147483647 (19. Januar 2038 3:14:07 UTC) –

9

Wie andere schon sagten, können Zeitstempel einen kleineren Bereich von Datumsangaben darstellen (von 1970 bis 2038). Zeitstempel messen jedoch die Anzahl der Sekunden seit der Unix-Epoche (1970-01-01 00:00:00 UTC) und machen sie dadurch unabhängig von der Zeitzone, während DATETIME ein Datum und eine Uhrzeit ohne Zeitzone speichert. Mit anderen Worten, Zeitstempel verweisen eindeutig auf einen bestimmten Zeitpunkt, während der genaue Zeitpunkt, auf den sich DATETIME bezieht, eine Zeitzone erfordert (die nicht in einem DATETIME-Feld gespeichert ist). Um zu sehen, warum dies von Bedeutung sein kann, überlegen Sie, was passiert, wenn wir unsere Zeitzone ändern.

Nehmen wir an, wir möchten die Datetime 2010-03-27 12:00 UTC speichern. Wenn wir dies speichern und es mit einem Zeitstempel oder DATETIME abrufen, dann scheint es normalerweise keinen Unterschied zu geben. Wenn sich der Server jedoch ändert, sodass die lokale Zeitzone UTC + 01 ist, erhalten wir zwei unterschiedliche Ergebnisse, wenn wir die Datetime herausziehen.

Wenn wir das Feld auf einen DATETIME-Wert festlegen, würde es trotz der Änderung der Zeitzone die Datumswerte als 2010-03-27 12:00 Uhr melden. Wenn wir das Feld auf einen Zeitstempel setzen, wird das Datum als 2010-03-27 11:00 gemeldet. Dies ist kein Problem mit beiden Datentypen - es ist nur ein Ergebnis der Tatsache, dass sie etwas andere Informationen speichern.

+0

Unix-Zeitstempel, in einer 32-Bit-Ganzzahl mit Vorzeichen, können Daten bis 1901 speichern, da sie von -2147483647 (13. Dezember 1901 8:45:53) reichen können PM UTC) bis 2147483647 (19. Januar 2038 3:14:07 UTC) –

2

Das hängt wirklich davon ab.Ich gebe Ihnen 2 Beispiele, wo man den anderen übertrifft:

Timestamp ist besser als DATETIME, wenn Sie Benutzer Sitzung in der Datenbank speichern möchten und die Sitzungszeit (im Timestamp Format) wird für schnelle Zeilenabruf verwendet (mit Index).
Zum Beispiel Tabelle kann wie folgt aussehen:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
Mit einem Index für die ersten beiden Spalten können Sie Ihre Abfragen wirklich beschleunigen. Wenn Sie einen DATETIME-Werttyp für das Feld session_create_time hatten, könnte es viel länger dauern. Berücksichtigen Sie, dass Sitzungsabfragen jedes Mal ausgeführt werden , wenn ein Benutzer eine Seite anfordert, so ist Effizienz entscheidend.

DATETIME ist besser als Zeitstempel, wenn Sie das Geburtsdatum eines Benutzers oder einige historische Ereignisse speichern möchten, die einen flexiblen Zeitbereich erfordern.

+0

Unix-Zeitstempel, in einer 32-Bit-Ganzzahl mit Vorzeichen, können Daten bis 1901 speichern, da sie von -2147483647 (13. Dezember, 1901 8:45:53 PM UTC) zu 2147483647 (19. Januar 2038 3:14:07 UTC). Wenn Sie also kein Datum vor 1901 speichern, würde ein Zeitstempel funktionieren. –