2016-05-13 11 views
0

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?

+0

Warum verwenden Sie nicht MySQL in 'TIMESTAMP' oder' DATETIME' eingebaut? – cmorrissey

+0

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

+2

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) –

Antwort

1

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.

+0

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