Benötige ich einen MySQL-Datentyp INT
oder BIGINT
, um den Unix-Zeitstempel zu speichern, der von PHP mktime zurückgegeben wird und von date-Funktionen verwendet wird?Welche Größe eines INT muss ich Unix-Zeitstempel in MySQL-Datenbank speichern?
Antwort
Sie können die Konstante PHP_INT_MAX
von PHP überprüfen, um die maximale Ganzzahl zu finden. Dies wird in den verschiedenen Umgebungen unterschiedlich sein. Auf meinem lokalen System:
echo date('Y-m-d H:i:s', PHP_INT_MAX) . '<br />';
// outputs: 292277026596-12-04 09:30:07
So ist die maximale Zeitmarke I ist erstellen:
echo mktime(9, 30, 7, 12, 4, 292277026596);
// outputs: 9223372036854775807
Alles, was größere Ergebnisse in etwas ähnlich einem 2038 problem (die Zahl negativ wird).
Also auf meinem speziellen System, ich müsste MySQL verwenden BIGINT
diese Werte zu speichern, wie INT
geht nur bis 2147483647 Reference auf.
Danke. Ja, es klingt wie 'BIGINT' ist der Weg zu gehen. Und wie in den obigen Kommentaren vorgeschlagen, würde 'TIMESTAMP' nicht funktionieren, da es implizit 32-Bit ist. Plus 'TIMESTAMP' macht diese impliziten Konvertierungen zu und von UTC (das macht mich verrückt!) – c00000fd
Warum verwenden Sie nicht MySQL in 'TIMESTAMP' oder' DATETIME' eingebaut? – cmorrissey
Sofern es keinen speziellen Grund gibt, dass Sie "Datumsangaben" als Ganzzahlen speichern müssen, würde ich die Verwendung der internen Datums-/Zeitstempelfunktionen von MySQL empfehlen. – Marcus
Mögliches Duplikat von [Wie sollten Unix-Zeitstempel in int-Spalten gespeichert werden?] (Http://stackoverflow.com/questions/4289793/how-should-unix-timestamps-be-stored-in-int-columns) –