Würden Sie die Verwendung eines datetime oder eine Zeitstempel Feld und warum (unter Verwendung von MySQL)?
Ich arbeite mit PHP auf der Serverseite.
Würden Sie die Verwendung eines datetime oder eine Zeitstempel Feld und warum (unter Verwendung von MySQL)?
Ich arbeite mit PHP auf der Serverseite.
In meinem Fall stelle ich UTC als Zeitzone für alles ein: das System, den Datenbankserver usw., so oft ich kann. Wenn mein Kunde eine andere Zeitzone benötigt, konfiguriere ich sie in der App.
Ich bevorzuge fast immer Zeitstempel anstelle von Datumsfeldern, weil Zeitstempel implizit die Zeitzone enthalten. In dem Moment, in dem auf die App von Benutzern aus verschiedenen Zeitzonen zugegriffen wird und Sie möchten, dass sie Daten und Zeiten in ihrer lokalen Zeitzone sehen, ist es mit diesem Feldtyp ziemlich einfach, dies zu tun, als wenn die Daten in datetime-Feldern gespeichert würden.
Außerdem würde ich mich bei einer Migration der Datenbank auf ein System mit einer anderen Zeitzone sicherer fühlen, wenn ich Zeitstempel verwenden würde. Ganz zu schweigen von möglichen Problemen bei der Berechnung von Differenzen zwischen zwei Zeitpunkten mit einer größeren Zeitverschiebung dazwischen und einer Genauigkeit von 1 Stunde oder weniger.
Zusammenfassend kann ich also sagen, dass ich die Vorteile des Zeitstempels schätze:
Aus all diesen Gründen wähle ich UTC- und Zeitstempelfelder, wo es möglich ist. Und ich vermeide Kopfschmerzen ;)
Zeitstempeldaten werden für die Person, die Ihre Bewerbung unterstützt, lustig sein, wenn der 20. Januar 2038 kommt. tick tock tick tock
Der Zeitstempeltyp könnte dann um ein Bit erhöht werden und die möglichen Werte verdoppeln.
Testen Sie Ihre Theorie der "Erhöhung um ein Bit" und sehen Sie, ob Sie den 1. Februar 2038 erfolgreich speichern und mit MySQL abrufen können. Zeigen Sie uns bitte Ihre Tabellendefinition, wenn Sie fertig sind. Wahrscheinlich werden Sie im Februar 2038 eine Menge unglücklicher Bekannter aus der Vergangenheit haben.
Die wichtigsten Unterschiede:
TIMESTAMP wird verwendet, um Änderungen an Datensätzen zu verfolgen, und wird jedes Mal aktualisiert, wenn der Datensatz geändert wird. DATETIME wird verwendet, um einen spezifischen und statischen Wert zu speichern, der von Änderungen in Datensätzen nicht beeinflusst wird.
TIMESTAMP wird auch von verschiedenen ZEITZONEN-Einstellungen beeinflusst. DATETIME ist konstant.
TIMESTAMP konvertiert intern die aktuelle Zeitzone in UTC für die Speicherung und konvertiert beim Abruf zurück in die aktuelle Zeitzone. DATETIME kann dies nicht tun.
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
Ich verwende immer einen Unix-Zeitstempel, einfach um beim Umgang mit vielen Datumsangaben die Vernunft zu bewahren, insbesondere bei der Anpassung an Zeitzonen, beim Hinzufügen/Subtrahieren von Daten und dergleichen. Beim Vergleich von Zeitstempeln schließt dies die komplizierenden Faktoren der Zeitzone aus und ermöglicht es Ihnen, Ressourcen in Ihrer serverseitigen Verarbeitung zu sparen (sei es Anwendungscode oder Datenbankabfragen), da Sie leichte arithmetische Verfahren verwenden, anstatt schwerere Funktionen zum Addieren/Subtrahieren von Datumswerten.
Eine weitere Überlegung wert:
Wenn Sie eine Anwendung entwickeln, wissen Sie nie, wie Ihre Daten später verwendet werden sollen. Wenn Sie beispielsweise eine Reihe von Datensätzen in Ihrem Datensatz mit einer Reihe von Elementen aus einer API eines Drittanbieters vergleichen und in chronologische Reihenfolge bringen müssen, werden Sie froh sein, wenn Sie Unix-Zeitstempel für Ihre Zeilen haben. Selbst wenn Sie sich entscheiden, MySQL-Zeitstempel zu verwenden, speichern Sie einen Unix-Zeitstempel als Versicherung.
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| 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. |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
Ich fand die Fähigkeit von TIMESTAMP, sich automatisch auf der Grundlage der aktuellen Zeit zu aktualisieren, ohne unnötige Auslöser zu verwenden, unübertroffen nützlich. Das ist nur ich aber, obwohl TIMESTAMP ist UTC, wie es gesagt wurde.
Sie kann über verschiedene Zeitzonen hinweg den Überblick behalten. Wenn Sie also zum Beispiel eine relative Zeit anzeigen müssen, ist die UTC-Zeit das, was Sie wollen.
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.
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/
0 Stimmen
Datetime ist völlig nutzlos . es ist nur ein dummer String. timestamp ist in jeder Hinsicht perfekt sondern sie endet im Jahr 2038.