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/

3voto

Elliptical view Punkte 2740

Bisher wurde nicht erwähnt, dass DEFAULT CURRENT_TIMESTAMP nur mit Feldern vom Typ Timestamp, aber nicht DateTime funktioniert.

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

9 Stimmen

En DEFAULT CURRENT_TIMESTAMP Unterstützung für eine DATETIME wurde in MySQL 5.6 hinzugefügt.

1 Stimmen

"Jedes der Synonyme für CURRENT_TIMESTAMP haben die gleiche Bedeutung wie CURRENT_TIMESTAMP . Diese sind CURRENT_TIMESTAMP(), NOW(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP y LOCALTIMESTAMP() ." -> mysql-unterlagen

3voto

Matthew Punkte 10398

In vielen Antworten wird vorgeschlagen, die Daten als Zeitstempel zu speichern, wenn es darum geht, genau definierte Zeitpunkte darzustellen. Man kann aber auch Zeitpunkte mit datetime haben, wenn man sie alle in UTC speichert, wie es die Konvention vorsieht.

0 Stimmen

Können Sie einige Gründe nennen, warum ich dies der Verwendung von Zeitstempeln vorziehen sollte?

3 Stimmen

@Jasir nicht wirklich, es scheint eine große Debatte zu sein. Ich wollte nur darauf hinweisen, dass datetime bestimmte Zeitpunkte darstellen kann, wenn es eine Konvention gibt, alle datetimes in einer bestimmten Zeitzone (z.B. UTC) zu speichern. Ich persönlich würde alles in datetime speichern, wobei der Zeitstempel auf das Jahr 2038 beschränkt ist (auch wenn ich davon ausgehe, dass sie irgendwann etwas daran ändern werden), und wenn ich mir einige Rohdaten in der DB ansehe, ist datetime lesbar, ohne dass ich eine Konvertierung vornehmen muss. Wiederum ist dies sehr subjektiv.

0 Stimmen

@Matthew Aber wenn die Sitzung time_zone ist nicht UTC Sie werden auch Überraschungen (Bugs) erleben, wenn Sie MySQL-Datum/Zeit-Funktionen wie NOW() , DATE_ADD ohne vorher die Zeitzone umzurechnen... Warum also die Interaktion mit der Datenbank komplizierter machen als nötig?

1voto

Wilson Hauck Punkte 1792

Wenn Sie GARANTIEREN wollen, dass Ihre Anwendung NICHT im Februar 2038 funktioniert, verwenden Sie TIMESTAMP. Den Bereich der unterstützten Daten finden Sie in Ihrem REFMAN.

0 Stimmen

2038 ist so weit, dass Sie die MySQL-Serverversion schon lange vorher auf eine Version geändert haben, die erweiterte TIMESTAMPs unterstützt. Außerdem wird davon ausgegangen, dass Ihre Anwendung noch in Betrieb sein wird.

1voto

Javier G.Raya Punkte 203

El DATENZEIT wird für Werte verwendet, die Datums- und Zeitangaben enthalten. MySQL ruft DATETIME-Werte im Format ab und zeigt sie an. Der unterstützte Bereich ist . 'JJJJJ-MM-TT hh:mm:ss' '1000-01-01 00:00:00''9999-12-31 23:59:59'

El TIMESTAMP Datentyp wird für Werte verwendet, die Datums- und Zeitanteile enthalten. TIMESTAMP hat einen Bereich von '1970-01-01 00:00:01'UTC bis '2038-01-19 03:14:07'UTC.

mysql> SELECT col,
     >     CAST(col AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS ut
     >     FROM ts ORDER BY id;
+---------------------+---------------------+
| col                 | ut                  |
+---------------------+---------------------+
| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 |
| 2019-12-31 23:40:10 | 2020-01-01 04:40:10 |
| 2020-01-01 13:10:10 | 2020-01-01 18:10:10 |
| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 |
| 2020-01-01 04:40:10 | 2020-01-01 09:40:10 |
| 2020-01-01 18:10:10 | 2020-01-01 23:10:10 |
+---------------------+---------------------+

URL MySQL 8.0 : https://dev.mysql.com/doc/refman/8.0/en/datetime.html

0voto

curiosity Punkte 784

timestamp ist die aktuelle Zeit eines Ereignisses, das von einem Computer durch Netzwerk-Zeitprotokoll (NTP) .

datetime ist eine aktuelle Zeitzone, die in Ihrem PHP Konfiguration.

0 Stimmen

Nein. Hat nichts mit NTP zu tun.

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