it-swarm.com.de

Soll ich den Datentyp datetime oder timestamp in MySQL verwenden?

Würden Sie die Verwendung eines datetime - oder eines timestamp -Felds empfehlen und warum (mit MySQL)? 

Ich arbeite mit PHP auf der Serverseite.

2434
karlipoppins

Zeitstempel in MySQL werden im Allgemeinen zum Nachverfolgen von Änderungen an Datensätzen verwendet. Sie werden häufig bei jeder Änderung des Datensatzes aktualisiert. Wenn Sie einen bestimmten Wert speichern möchten, sollten Sie ein Datumsfeld verwenden.

Wenn Sie sich für die Verwendung eines UNIX-Zeitstempels oder eines nativen MySQL-Datumsfelds entschieden haben, verwenden Sie das native Format. Sie können Berechnungen in MySQL auf diese Weise durchführen ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)") und es ist einfach, das Format des Werts in einen UNIX-Zeitstempel ("SELECT UNIX_TIMESTAMP(my_datetime)") zu ändern, wenn Sie den Datensatz abfragen, wenn Sie ihn mit PHP bearbeiten möchten.

1654
blivet

In MySQL 5 und höher werden TIMESTAMP -Werte zur Speicherung von der aktuellen Zeitzone in UTC und von UTC in die aktuelle Zeitzone zum Abruf konvertiert. (Dies tritt nur für den TIMESTAMP-Datentyp und nicht für andere Typen wie DATETIME auf.)

Standardmäßig ist die aktuelle Zeitzone für jede Verbindung die Uhrzeit des Servers. Die Zeitzone kann pro Verbindung festgelegt werden, wie in MySQL Server Time Zone Supportbeschrieben.

851
Nir

Ich verwende DATETIME-Felder immer für etwas anderes als Zeilenmetadaten (Erstellungsdatum oder Änderungsdatum).

Wie erwähnt in der MySQL-Dokumentation:

Der DATETIME-Typ wird verwendet, wenn Sie Werte benötigen, die sowohl Datums- als auch Zeitinformationen enthalten. MySQL ruft DATETIME-Werte ab und zeigt sie im Format 'JJJJ-MM-TT HH: MM: SS' an. Der unterstützte Bereich liegt zwischen '1000-01-01 00:00:00' und '9999-12-31 23:59:59'.

...

Der TIMESTAMP-Datentyp hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-09 03:14:07' UTC. Es hat unterschiedliche Eigenschaften, abhängig von der MySQL-Version und dem SQL-Modus, in dem der Server ausgeführt wird.

Es ist sehr wahrscheinlich, dass Sie die untere Grenze für TIMESTAMPs im allgemeinen Gebrauch erreichen - z. Geburtsdatum speichern.

467
scronide

Die folgenden Beispiele zeigen, wie der Datumstyp TIMESTAMP die Werte geändert hat, nachdem der time-zone to 'america/new_york' geändert wurde, wobei DATETIME unverändert bleibt.

mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | Asia/Calcutta       |
+------------------+---------------------+

mysql> create table datedemo(
    -> mydatetime datetime,
    -> mytimestamp timestamp
    -> );

mysql> insert into datedemo values ((now()),(now()));

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+

mysql> set time_zone="america/new_york";

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+

Ich habe meine Antwort in einen Artikel umgewandelt, damit mehr Leute diese nützlichen MySQL: Datetime versus Timestamp-Datentypen finden können.

299
mr_eclair

Der Hauptunterschied besteht darin, dass DATETIME konstant ist, während TIMESTAMP von der Einstellung time_zone beeinflusst wird.

Es ist also nur von Bedeutung, wenn Sie Cluster über Zeitzonen hinweg synchronisiert haben oder in Zukunft möglicherweise synchronisiert haben.

In einfacheren Worten: Wenn ich eine Datenbank in Australien habe und einen Speicherauszug dieser Datenbank zum Synchronisieren/Auffüllen einer Datenbank in Amerika mache, würde TIMESTAMP die Echtzeitzeit des Ereignisses in der neuen Zeitzone aktualisieren DATETIME würde immer noch den Zeitpunkt des Ereignisses in der au Zeitzone widerspiegeln .

Ein gutes Beispiel für die Verwendung von DATETIME, bei der TIMESTAMP hätte verwendet werden sollen, ist bei Facebook, wo die Server nie ganz sicher sind, wie viel Zeit in Zeitzonen passiert. Einmal hatte ich ein Gespräch, in dem die Zeit darauf ankam, auf Nachrichten zu antworten, bevor die Nachricht tatsächlich gesendet wurde. (Dies könnte natürlich auch durch eine schlechte Zeitzonenübersetzung in der Messagingsoftware verursacht worden sein, wenn die Zeiten gebucht und nicht synchronisiert wurden.)

182
ekerner

Ich treffe diese Entscheidung auf einer semantischen Basis.

Ich benutze einen Zeitstempel, wenn ich einen (mehr oder weniger) festen Zeitpunkt aufzeichnen muss. Zum Beispiel, wenn ein Datensatz in die Datenbank eingefügt wurde oder wenn eine Benutzeraktion stattfand.

Ich verwende ein datetime-Feld, wenn das Datum und die Uhrzeit beliebig eingestellt und geändert werden können. Zum Beispiel, wenn ein Benutzer später Änderungsänderungen speichern kann.

115
unbeknown

TIMESTAMP besteht aus 4 Bytes vs. 8 Bytes für DATETIME. 

http://dev.mysql.com/doc/refman/5.0/de/storage-requirements.html

Aber wie Scronide gesagt hat, hat es eine untere Grenze des Jahres 1970. Es ist jedoch für alles gut, was in der Zukunft passieren könnte;)

92
Alex
  1. TIMESTAMP besteht aus vier Bytes gegenüber acht Bytes für DATETIME.

  2. Zeitstempel sind auch in der Datenbank leichter und werden schneller indiziert.

  3. Der DATETIME-Typ wird verwendet, wenn Sie Werte benötigen, die sowohl Datums- als auch Zeitinformationen enthalten. MySQL ruft DATETIME-Werte ab und zeigt sie im Format JJJJ-MM-TT HH: MM: SS an. Der unterstützte Bereich ist "1000-01-01 00:00:00" bis "9999-12-31 23:59:59".

Der TIMESTAMP-Datentyp hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-09 03:14:07' UTC. Es hat unterschiedliche Eigenschaften, abhängig von der MySQL-Version und dem SQL-Modus, in dem der Server ausgeführt wird.

  1. DATETIME ist konstant, während TIMESTAMP durch die Einstellung von time_zone beeinflusst wird.
89
Vivek S

Ich empfehle, none ein DATETIME- oder ein TIMESTAMP-Feld zu verwenden. Wenn Sie einen bestimmten Tag als Ganzes darstellen möchten (beispielsweise einen Geburtstag), verwenden Sie einen DATE-Typ. Wenn Sie jedoch spezifischer sind, möchten Sie wahrscheinlich einen tatsächlichen Moment im Gegensatz zu einer Einheit von aufnehmen Zeit (Tag, Woche, Monat, Jahr). Verwenden Sie anstelle von DATETIME oder TIMESTAMP ein BIGINT, und speichern Sie einfach die Anzahl der Millisekunden seit der Epoche (System.currentTimeMillis (), wenn Sie Java verwenden). Das hat mehrere Vorteile:

  1. Sie vermeiden das Einkoppeln von Anbietern. So ziemlich jede Datenbank unterstützt Ganzzahlen auf ähnliche Weise. Angenommen, Sie möchten in eine andere Datenbank wechseln. Möchten Sie sich über die Unterschiede zwischen den DATETIME-Werten von MySQL und der Definition von Oracle Gedanken machen? TIMESTAMPS haben auch unter verschiedenen Versionen von MySQL eine andere Genauigkeit. Erst vor kurzem hat MySQL Millisekunden in den Zeitstempeln unterstützt. 
  2. Keine Zeitzonenprobleme. Hier wurden einige aufschlussreiche Kommentare dazu gegeben, was mit Zeitzonen mit den verschiedenen Datentypen geschieht. Aber ist dies allgemein bekannt und werden sich alle Ihre Kollegen die Zeit nehmen, um es zu lernen? Andererseits ist es ziemlich schwierig, einen BigINT in ein Java.util.Date zu verwandeln. Die Verwendung eines BIGINT führt dazu, dass viele Probleme mit Zeitzonen auf der Strecke bleiben.
  3. Keine Sorge um Reichweite oder Präzision. Sie müssen sich keine Sorgen darüber machen, was bei zukünftigen Datumsbereichen zu kurz kommt (TIMESTAMP geht nur bis 2038). 
  4. Tool-Integration von Drittanbietern. Durch die Verwendung einer Ganzzahl ist es für Drittanbieter-Tools (z. B. EclipseLink) unerheblich, mit der Datenbank zu kommunizieren. Nicht jedes Tool eines Drittanbieters hat das gleiche Verständnis von "datetime" wie MySQL. Möchten Sie in Hibernate versuchen, herauszufinden, ob Sie ein Java.sql.TimeStamp- oder Java.util.Date-Objekt verwenden sollten, wenn Sie diese benutzerdefinierten Datentypen verwenden? Die Verwendung Ihrer Basisdatentypen ist mit Tools von Drittanbietern trivial. 

Dieses Problem hängt eng damit zusammen, wie Sie einen Geldwert (d. H. 1,99 US-Dollar) in einer Datenbank speichern. Sollten Sie eine Dezimalzahl oder den Money-Typ der Datenbank oder die schlechteste aller Doppeln verwenden? Alle drei dieser Optionen sind aus den oben genannten Gründen schrecklich. Die Lösung besteht darin, den Wert des Geldes in Cent mit BIGINT zu speichern und dann Cents in Dollar umzuwandeln, wenn Sie den Wert für den Benutzer anzeigen. Die Datenbank hat die Aufgabe, Daten zu speichern und diese Daten NICHT zu interpretieren. Alle diese ausgefallenen Datentypen, die Sie in Datenbanken (insbesondere in Oracle) sehen, tragen wenig dazu bei und führen Sie auf dem Weg zum Anbieter-Lock-In. 

88
user64141

Hängt wirklich von der Anwendung ab.

Legen Sie für einen Termin in Sanghai einen Zeitstempel eines Benutzers auf einem Server in New York fest. Wenn sich der Benutzer nun in Sanghai verbindet, greift er von einem gespiegelten Server in Tokio auf denselben Terminstempel zu. Er wird den Termin in Tokio sehen, versetzt von der ursprünglichen New Yorker Zeit.

Daher ist datetime für Werte, die die Benutzerzeit wie einen Termin oder einen Zeitplan darstellen, besser. Damit kann der Benutzer unabhängig von den Servereinstellungen genau das gewünschte Datum und die gewünschte Uhrzeit einstellen. Die festgelegte Zeit ist die festgelegte Zeit, die nicht durch die Zeitzone des Servers, die Zeitzone des Benutzers oder durch Änderungen bei der Berechnung der Sommerzeit beeinflusst wird (ja, es ändert sich).

Andererseits verwenden Sie für Werte, die die Systemzeit wie Zahlungsvorgänge, Tabellenänderungen oder Protokollierung darstellen, immer Zeitstempel. Das System wird nicht durch Verschieben des Servers in eine andere Zeitzone oder durch Vergleiche zwischen Servern in verschiedenen Zeitzonen beeinträchtigt.

Zeitstempel sind auch in der Datenbank leichter und werden schneller indiziert.

41
ianaré

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

Jedes neuere Front-End-Framework (Angular 1/2, React, Vue, ...) kann Ihre UTC-Datumszeit einfach und automatisch in Ortszeit konvertieren.

Zusätzlich:

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


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 hier verfügbar: https://docs.angularjs.org/api/ng/filter/date

37
Sebastien Horin

Ein timestamp-Feld ist ein Sonderfall des datetime-Feldes. Sie können timestamp-Spalten erstellen, um spezielle Eigenschaften zu erhalten. Es kann so eingestellt werden, dass es sich beim Erstellen und/oder Aktualisieren selbst aktualisiert.

In "größeren" Datenbankformaten hat timestamp ein paar spezielle Auslöser.

Was das Richtige ist, hängt ganz davon ab, was Sie tun möchten.

32
Jeff Warnica

TIMESTAMP ist immer in UTC (dh seit 1970-01-01, in UTC verstrichene Sekunden) und wird von Ihrem MySQL-Server automatisch in das Datum und die Uhrzeit für die Server-Zeitzone konvertiert. Langfristig ist TIMESTAMP der richtige Weg, weil Sie wissen, dass Ihre Zeitdaten immer in UTC vorliegen. Zum Beispiel werden Sie Ihre Daten nicht vermasseln, wenn Sie zu einem anderen Server migrieren oder die Zeitzoneneinstellungen auf Ihrem Server ändern.

28
Sobes

Vergleich zwischen DATETIME, TIMESTAMP und DATE

 enter image description here

Was ist das?

  • Ein DATETIME- oder TIMESTAMP-Wert kann einen nachfolgenden Sekundenbruchteil mit einer Genauigkeit von bis zu sechs Sekunden (Mikrosekunden) enthalten. Insbesondere in .__ wird jeder Bruchteil eines Werts, der in eine DATETIME .__- oder TIMESTAMP-Spalte eingefügt wird, gespeichert und nicht verworfen. Dies ist natürlich optional.

Quellen:

24
jdc91

Es ist erwähnenswert, dass Sie in MySQL beim Erstellen Ihrer Tabellenspalten Folgendes verwenden können:

on update CURRENT_TIMESTAMP

Dadurch wird die Zeit bei jeder Instanz, an der Sie eine Zeile ändern, aktualisiert. Dies ist manchmal hilfreich für gespeicherte Informationen zur letzten Bearbeitung. Dies funktioniert nur mit Zeitstempel, jedoch nicht mit Datumszeit.

21
leejmurphy

Ich würde immer einen Unix-Zeitstempel verwenden, wenn ich mit MySQL und PHP arbeite. Der Hauptgrund dafür ist die standardmäßige date - Methode in PHP, die einen Zeitstempel als Parameter verwendet, sodass keine Analyse erforderlich ist.

Um den aktuellen Unix-Zeitstempel in PHP abzurufen, führen Sie einfach time(); aus.
und in MySQL SELECT UNIX_TIMESTAMP();.

20
Mark Davidson

Wenn Sie aus meinen Erfahrungen ein Datumsfeld möchten, in das das Einfügen nur einmal vorkommt und Sie keine Aktualisierung oder andere Aktion für dieses bestimmte Feld wünschen, fahren Sie mit date time fort.

Stellen Sie sich beispielsweise eine user-Tabelle mit einem REGISTRATION DATE -Feld vor. Wenn Sie in dieser user-Tabelle wissen möchten, wann sich ein bestimmter Benutzer zuletzt angemeldet hat, gehen Sie zu einem Feld vom Typ timestamp, damit das Feld aktualisiert wird.

Wenn Sie die Tabelle aus phpMyAdmin erstellen, aktualisiert die Standardeinstellung das Feld timestamp, wenn eine Zeilenaktualisierung durchgeführt wird. Wenn Ihr Zeitstempelfeld nicht mit der Zeilenaktualisierung aktualisiert wird, können Sie die folgende Abfrage verwenden, um ein Zeitstempel -Feld automatisch aktualisieren zu lassen.

ALTER TABLE your_table
      MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
14
Kannan Prasad

Der Zeitstempeldatentyp speichert Datum und Uhrzeit, jedoch im UTC-Format, nicht im aktuellen Zeitzonenformat wie bei datetime. Wenn Sie Daten abrufen, konvertiert der Zeitstempel diesen Wert erneut in die aktuelle Zeitzonenzeit.

Nehmen Sie an, Sie befinden sich in den USA und erhalten Daten von einem Server, der eine Zeitzone der USA hat. Dann erhalten Sie Datum und Uhrzeit gemäß der US-Zeitzone. Die Spalte für den Zeitstempeldatentyp wird immer automatisch aktualisiert, wenn die Zeile aktualisiert wird. Daher kann es nützlich sein, zu verfolgen, wann eine bestimmte Zeile zuletzt aktualisiert wurde.

Für weitere Informationen lesen Sie den Blogbeitrag Timestamp Vs Datetime.

13
Arvind

Verweis aus diesem Artikel:

Die Hauptunterschiede:

TIMESTAMP dient zum Nachverfolgen von Änderungen an Datensätzen und wird jedes Mal aktualisiert, wenn der Datensatz geändert wird. DATETIME wird zum Speichern bestimmter und statischer Werte verwendet, die nicht von Änderungen in Datensätzen betroffen sind.

TIMESTAMP ist auch von unterschiedlichen TIME ZONE-Einstellungen betroffen. _DATETIME ist konstant.

TIMESTAMP konvertiert intern die aktuelle Zeitzone für die Speicherung in UTC und während des Abrufs in die aktuelle Zeitzone zurück konvertiert. DATETIME kann dies nicht.

Von TIMESTAMP unterstützter Bereich: .__ '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC DATETIME unterstützter Bereich: '1000-01-01 00:00:00 'bis' 9999-12-31 23:59:59 '

12
Anvesh

Achten Sie auf das Ändern des Zeitstempels, wenn Sie eine UPDATE-Anweisung für eine Tabelle ausführen. Wenn Sie eine Tabelle mit den Spalten 'Name' (varchar), 'Age' (int) und 'Date_Added' (Zeitmarke) haben, führen Sie die folgende DML-Anweisung aus

UPDATE table
SET age = 30

dann wird jeder einzelne Wert in Ihrer Spalte 'Date_Added' in den aktuellen Zeitstempel geändert. 

12
Lloyd Banks

Ich verwende immer einen Unix-Zeitstempel, nur um die Vernunft zu bewahren, wenn Sie mit vielen Datumsangaben umgehen, insbesondere wenn Sie Zeitzonen anpassen, Datumsangaben hinzufügen oder subtrahieren und dergleichen. Beim Vergleich von Zeitstempeln werden die komplizierenden Faktoren der Zeitzone nicht berücksichtigt, und Sie können Ressourcen in der serverseitigen Verarbeitung (ob Anwendungscode oder Datenbankabfragen) sparen, indem Sie die Leichtgewicht-Arithmetik verwenden und nicht das Datum/Uhrzeit-Additionsverfahren Funktionen. 

Eine andere Sache, die eine Überlegung wert ist:

Wenn Sie eine Anwendung erstellen, wissen Sie nie, wie Ihre Daten später verwendet werden müssen. Wenn Sie zum Beispiel eine Reihe von Datensätzen in Ihrem Datensatz mit einer Reihe von Elementen aus einer API eines Drittanbieters vergleichen und sagen müssen, dass sie in chronologischer Reihenfolge angeordnet werden sollen, sind Sie glücklich Unix-Zeitstempel für Ihre Zeilen. Selbst wenn Sie sich für die Verwendung von MySQL-Zeitstempeln entscheiden, speichern Sie einen Unix-Zeitstempel als Versicherung.

12
Oliver Holmberg

In meinem Fall habe ich UTC als Zeitzone für alles festgelegt: das System, den Datenbankserver usw., wann immer ich kann. Wenn mein Kunde eine andere Zeitzone benötigt, konfiguriere ich sie in der App.

Ich bevorzuge fast immer Zeitstempel anstelle von Datums-/Uhrzeitfeldern, da Zeitstempel implizit die Zeitzone enthalten. Seit dem Zeitpunkt, zu dem auf die App von Benutzern aus verschiedenen Zeitzonen zugegriffen wird und Sie möchten, dass ihnen Datum und Uhrzeit in ihrer lokalen Zeitzone angezeigt werden, macht es dieser Feldtyp ziemlich einfach, dies zu tun, als wenn die Daten in datetime-Feldern gespeichert wären .

Bei einer Migration der Datenbank auf ein System mit einer anderen Zeitzone würde ich mich bei der Verwendung von Zeitstempeln sicherer fühlen. Ganz zu schweigen von möglichen Problemen bei der Berechnung von Differenzen zwischen zwei Momenten, zwischen denen sich die Sommerzeit ändert, und die eine Genauigkeit von 1 Stunde oder weniger erfordern.

Zusammenfassend schätze ich diese Vorteile des Zeitstempels:

  • einsatzbereit für internationale (multi time zone) apps
  • einfache Migrationen zwischen Zeitzonen
  • recht einfach, Unterschiede zu berechnen (einfach beide Zeitmarken abziehen)
  • keine Sorge über Datumsangaben in einer Sommerzeit

Aus all diesen Gründen wähle ich, wo möglich, UTC- und Zeitstempelfelder. Und ich vermeide Kopfschmerzen;)

11
rogerpro

Ich habe einen unübertroffenen Nutzen in der Fähigkeit von TIMESTAMP gefunden, sich selbst anhand der aktuellen Uhrzeit ohne unnötige Auslöser zu aktualisieren. Das ist nur ich, obwohl TIMESTAMP UTC ist, wie es gesagt wurde.

Es kann verschiedene Zeitzonen nachverfolgen. Wenn Sie beispielsweise eine relative Zeit anzeigen möchten, ist die UTC-Zeit genau das, was Sie möchten.

10
Marc DiMillo

Ein weiterer Unterschied zwischen Timestamp und Datetime ist der Timestamp, dessen Standardwert nicht NULL ist.

10
ecleel
10
Charles Faiga

Ich bevorzuge Zeitstempel, um alles in einem gemeinsamen Rohformat zu speichern und die Daten im PHP - Code oder in Ihrer SQL-Abfrage zu formatieren. Es gibt Fälle, in denen es in Ihrem Code nützlich ist, alles in einfachen Sekunden zu halten.

8
Hans
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
|                                       TIMESTAMP                                       |                                 DATETIME                                 |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP requires 4 bytes.                                                           | DATETIME requires 8 bytes.                                               |
| Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format.                |
| TIMESTAMP supported range: ‘1970-01-01 00:00:01′ UTC to ‘2038-01-19 03:14:07′ UTC.    | DATETIME supported range: ‘1000-01-01 00:00:00′ to ‘9999-12-31 23:59:59′ |
| TIMESTAMP during retrieval converted back to the current time zone.                   | DATETIME can not do this.                                                |
| TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose.    | DATETIME is used mostly for user-data.                                   |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
8
Premraj

Ich mag einen Unix-Zeitstempel, weil Sie in Zahlen konvertieren können und sich nur um die Anzahl kümmern müssen. Plus addieren Sie, subtrahieren Sie und erhalten Sie Dauern usw. Dann konvertieren Sie das Ergebnis in beliebigem Format in Date. Dieser Code ermittelt, wie viel Zeit zwischen einem Zeitstempel eines Dokuments und der aktuellen Zeit in Minuten vergangen ist.

$date  = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now  - $result) / 60);
$min = round($unix_diff_min);
7
user723220

Eine TIMESTAMP benötigt 4 Bytes, während eine DATETIME 8 Bytes benötigt.

6
Mwangi Thiga

Ich verwende beim Speichern von UTC lediglich unsignierte BIGINT ...

was dann noch in PHP an die lokale Zeit angepasst werden kann.

die DATETIME, die mit FROM_UNIXTIME( integer_timestamp_column ) ausgewählt werden soll.

man sollte offensichtlich einen Index für diese Spalte setzen, sonst würde es keinen Fortschritt geben.

4
Martin Zeitler

Bisher wurde nicht erwähnt, dass DEFAULT CURRENT_TIMESTAMP nur mit Zeitstempeln funktioniert, nicht jedoch mit DateTime-Feldern. 

Dies wird relevant für MS Access-Tabellen, die nur DateTime, nicht jedoch Timestamp verwenden können.

4
Elliptical view

TIMESTAMP ist nützlich, wenn Sie Besucher aus verschiedenen Ländern mit unterschiedlichen Zeitzonen haben. Sie können den TIMESTAMP ganz einfach in jede Landeszeitzone konvertieren

4
Mahdi Jazini

Viele Antworten hier schlagen vor, als Zeitstempel zu speichern, wenn Sie genau definierte Zeitpunkte darstellen müssen. Sie können jedoch auch Zeitpunkte mit datetime haben, wenn Sie sie alle gemäß der Konvention in UTC speichern.

3
Matthew

Wenn Sie GARANTIEREN möchten, dass Ihre Anwendung im Februar 2038 NICHT funktioniert, verwenden Sie TIMESTAMP. Beziehen Sie sich auf Ihren REFMAN, um eine Liste der unterstützten Daten zu erhalten.

1
Wilson Hauck

Ich habe aufgehört, datetime in meinen Anwendungen zu verwenden, nachdem ich mit vielen Problemen und Fehlern in Bezug auf Zeitzonen konfrontiert war. IMHO mit timestamp ist in den meisten Fällen besser als datetime.

Wenn Sie fragen, wie spät es ist? und die Antwort kommt als etwas wie '2019-02-05 21:18:30', das ist nicht abgeschlossen, nicht definiert Antwort, weil es an einem anderen Teil fehlt, in welcher Zeitzone? Washington Moskau Peking

Wenn Sie datetime ohne Zeitzone verwenden, bedeutet dies, dass Ihre Anwendung nur eine Zeitzone verwendet. Zeitstempel bieten Ihnen jedoch die Vorteile von datetime und die Flexibilität, den gleichen Zeitpunkt in verschiedenen Zeitzonen anzuzeigen.

Hier sind einige Fälle, in denen Sie sich datetime bedauern und wünschen, dass Sie Ihre Daten in Zeitstempeln speichern.

  1. Für den Komfort Ihrer Kunden möchten Sie ihnen die Zeiten basierend auf ihren bevorzugten Zeitzonen anzeigen, ohne dass sie sich rechnen müssen, und die Zeit in ihre sinnvolle Zeitzone umwandeln. Sie müssen lediglich die Zeitzone ändern, und der gesamte Anwendungscode wird derselbe sein .(Eigentlich sollten Sie die Zeitzone immer beim Start der Anwendung definieren oder die Verarbeitung bei Anwendungen mit PHP anfordern).

    SET time_zone = '+2:00';
    
  2. sie haben das Land geändert, in dem Sie sich aufhalten, und Ihre Arbeit mit der Pflege der Daten fortsetzen, während sie in einer anderen Zeitzone angezeigt werden (ohne die tatsächlichen Daten zu ändern).

  3. sie akzeptieren Daten von verschiedenen Kunden auf der ganzen Welt. Jeder von ihnen trägt die Zeit in seine Zeitzone ein. 

Zusamenfassend

datetime = Anwendung unterstützt 1 Zeitzone (zum Einfügen und Auswählen)

timestamp = Anwendung unterstützt jede Zeitzone (sowohl zum Einfügen als auch zum Auswählen)


Diese Antwort dient nur dazu, die Flexibilität und Leichtigkeit von Zeitstempeln bei Zeitzonen hervorzuheben. Sie deckt keine anderen Unterschiede ab, z. B. die Größe der Spalte oder den Bereich oder den Bruch .

1
Accountant م

Unterschied zwischen DATETIME & TIMESTAMP

  1. Unterstützter Bereich für DATETIME ist '1000-01-01 00:00:00' bis '9999-12-31 23:59:59', während für TIMESTAMP '1970-01-01 00:00:01' UTC bis '1970-01-01 00:00:01' gilt '2038-01-09 03:14:07' UTC.

  2. Vor MySQL 5.6.4 benötigt TIMESTAMP 4 Bytes (+3 Bytes für Sekundenbruchteile), um Daten zu speichern, während DATETIME 8 Bytes (+3 Bytes für Sekundenbruchteile) benötigt.

  3. Ab MySQL 5.6.4 benötigt DATETIME 5 Bytes + 3 zusätzliche Bytes für das Speichern von Daten in Sekundenbruchteilen.

    4. In MySQL5 + wird der Wert TIMESTAMP von der aktuellen Zeit in UTC und umgekehrt konvertiert, während DATETIME keine Konvertierung vornimmt.

  4. TIMESTAMP unterscheidet sich von den aktuellen Zeitzoneneinstellungen, während DATETIME konstant bleibt. TIMESTAMP-Daten können indiziert werden, DATETIME-Daten nicht.

  5. Abfragen mit DATETIME werden nicht zwischengespeichert, aber Abfragen mit TIMESTAMP werden zwischengespeichert.

0

timestamp ist die aktuelle Uhrzeit eines Ereignisses, das von einem Computer über Network Time Protocol (NTP) aufgezeichnet wird.

datetime ist eine aktuelle Zeitzone, die in IhrerPHPKonfiguration festgelegt ist.

0
curiosity