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/

29voto

leejmurphy Punkte 954

Es ist erwähnenswert, dass Sie in MySQL bei der Erstellung Ihrer Tabellenspalten etwas verwenden können, das in etwa der folgenden Darstellung entspricht:

on update CURRENT_TIMESTAMP

Dadurch wird die Zeit bei jeder Änderung einer Zeile aktualisiert, was manchmal sehr hilfreich ist, um Informationen über die letzte Änderung zu speichern. Dies funktioniert jedoch nur mit Zeitstempel, nicht mit datetime.

28voto

Mark Davidson Punkte 5519

Ich würde immer einen Unix-Zeitstempel verwenden, wenn ich mit MySQL und PHP arbeite. Der Hauptgrund dafür ist, dass der Standard Datum Methode in PHP verwendet einen Zeitstempel als Parameter, so dass kein Parsing erforderlich wäre.

Um den aktuellen Unix-Zeitstempel in PHP zu erhalten, tun Sie einfach Folgendes time();
und in MySQL tun SELECT UNIX_TIMESTAMP(); .

8 Stimmen

-1 Ich denke, dass die folgende Antwort besser ist - die Verwendung von datetime ermöglicht es Ihnen, mehr Logik für die Datumsverarbeitung in MySQL selbst zu verschieben, was sehr nützlich sein kann.

0 Stimmen

Hat es nicht Benchmarks gegeben, die zeigen, dass das Sortieren in MySQL langsamer ist als in php?

0 Stimmen

Nun, es hängt davon ab, manchmal ist es gut, es zu verwenden, wenn wir strtotime nicht verwenden möchten. ( php5.3 dep )

20voto

Kannan Prasad Punkte 1778

Wenn Sie ein Datumsfeld haben möchten, in das nur einmal eingefügt wird, und Sie keine Aktualisierung oder andere Aktion für dieses bestimmte Feld durchführen möchten, sollten Sie meiner Erfahrung nach mit Datum Uhrzeit .

Nehmen wir zum Beispiel eine user Tisch mit einer REGISTRIERUNGSDATUM Bereich. In diesem user Tabelle, wenn Sie die letzte Anmeldezeit eines bestimmten Benutzers wissen möchten, verwenden Sie ein Feld der Zeitstempel eingeben, damit das Feld aktualisiert wird.

Wenn Sie die Tabelle von phpMyAdmin die Standardeinstellung aktualisiert die Zeitstempel Feld, wenn eine Zeile aktualisiert wird. Wenn Ihr Zeitstempelfeld nicht mit der Zeilenaktualisierung aktualisiert wird, können Sie die folgende Abfrage verwenden, um eine Zeitstempel Feld wird automatisch aktualisiert.

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

17voto

Arvind Punkte 1832

Der Datentyp timestamp speichert Datum und Uhrzeit, jedoch im UTC-Format und nicht im Format der aktuellen Zeitzone wie datetime. Und wenn Sie Daten abrufen, konvertiert timestamp diese wiederum in die aktuelle Zeitzone.

Nehmen wir also an, Sie befinden sich in den USA und erhalten Daten von einem Server mit der Zeitzone USA. Dann erhalten Sie das Datum und die Uhrzeit entsprechend der Zeitzone der USA. Die Spalte des Datentyps Zeitstempel wird immer automatisch aktualisiert, wenn ihre Zeile aktualisiert wird. Es kann also nützlich sein, zu verfolgen, wann eine bestimmte Zeile das letzte Mal aktualisiert wurde.

Weitere Einzelheiten finden Sie im Blogbeitrag Zeitstempel vs. Datetime .

0 Stimmen

Sie können (sollten) die Zeitzone immer auf der Ebene der Sitzung mit SET time_zone = '+0:00'; (UTC hier), um sicher zu sein, was Sie von TIMESTAMP Werte und vermeiden Sie die Abhängigkeit von der Standardzeitzone des Servers, die sich ändern kann.

17voto

Lloyd Banks Punkte 33849

Achten Sie darauf, dass sich der Zeitstempel ändert, wenn Sie eine UPDATE-Anweisung für eine Tabelle ausführen. Wenn Sie eine Tabelle mit den Spalten 'Name' (varchar), 'Alter' (int) und 'Date_Added' (timestamp) haben und die folgende DML-Anweisung ausführen

UPDATE table
SET age = 30

dann würde jeder einzelne Wert in Ihrer Spalte "Date_Added" auf den aktuellen Zeitstempel geändert.

4 Stimmen

Je nachdem, wie Sie Ihre Tabelle einrichten, können Sie dieses Verhalten steuern. schauen Sie sich dev.mysql.com/doc/refman/5.5/de/timestamp-initialization.html

6 Stimmen

@CharlesFaiga Standardmäßig wird der Zeitstempel aktualisiert, wenn eine andere Spalte aktualisiert wird. Sie müssen dies explizit deaktivieren, wenn Sie möchten, dass der Zeitstempel seinen ursprünglichen Wert beibehält

0 Stimmen

Was ist das?! Sie müssen die Spalte Zeitstempel auf ON UPDATE CURRENT_TIMESTAMP

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