2016-10-06 6 views
6

Einige Hintergrundinformationen:Wie UNIX Zeit mit MySQL speichern

Meine Website hängt stark von den Benutzern über alle Arten von verschiedenen Zeitzonen zu koordinieren.

Ich verwende Carbon, um meine Zeitzonenkonvertierungen und Berechnungen auf der Serverseite und moment.js auf dem Client zu verarbeiten.

Als Ergebnis wurde die Entwurfsauswahl getroffen, dass alle Datumsangaben (z. B. die Startzeit eines Ereignisses) als Unix-Zeitstempel gespeichert würden.

Problem

Ich bin ein bisschen durch die Definition eines "Zeitstempel" verwirrt. PhpMyAdmin ist der Zeitstempel nicht ein Zeitstempel Unix sondern ein Datumsformat:

2016-10-06 20:50:46 

Wenn Sie also ein Standardfeld des aktuellen Zeitstempel haben wollen dann das aktuelle Datum in GMT erhalten.

Diese Dinge komplizierter macht in einem Benutzer Zeitzone zu einem Zeitstempel integer Unix im Vergleich zu konvertieren zurück ...

Frage:

Welche Art Feld sollte ich als meine Unix-Zeitstempel speichern, ich derzeit verwende int(11) mit einem Standardwert von none. Durch Erweiterung ... gibt es eine Möglichkeit, den aktuellen Unix-Zeitstempel (z. B. 1475971200) standardmäßig in MySQL zu speichern?

+1

einfügen Sie können das Problem umgehen, indem Sie die Datetime aus und Unix-Zeitstempel konvertieren. Um also einen Unix-Timestamp einzufügen, würden Sie ein DATETIME-Feld in Ihrer Tabelle erstellen und den Unix-Timestamp mit 'FROM_UNIXTIME (1514789942)' konvertieren. Wenn Sie dann den Wert in Unix-Timstamp zurückholen wollen, wählen Sie 'SELECT UNIX_TIMESTAMP (my_datetime_field)' – Jacques

Antwort

10

A Der Unix-Zeitstempel ist eine große Ganzzahl (Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC), daher ist INT(11) der richtige Datentyp.

Leider glaube ich nicht, dass es eine Möglichkeit gibt, einen Standard anzugeben, der den aktuellen Zeitstempel einfügen wird. Sie müssen UNIX_TIMESTAMP() explizit beim Einfügen aufrufen und das verwenden. Funktionsaufrufe sind in DEFAULT Spezifikationen nicht erlaubt.

2

Sie können weiterhin eine nicht signierte INT verwenden, aber Sie müssen den Zeitstempel beim Einfügen manuell eingeben (UNIX_TIMESTAMP()).

Oder können Sie den Zeitstempel Typ mit dem Standard CURRENT_TIMESTAMP verwenden (die als int hinter den Kulissen gespeichert ist) und wandeln es in ein int bei der Auswahl:
SELECT UNIX_TIMESTAMP(foo_field) FROM foo_table

Referenz - Is it possible to create a column with a UNIX_TIMESTAMP default in MySQL?

0

Eigentlich haben Sie entweder bigint oder varchar weil das Maximum für int(11) ist 2'147'483'647 (weitere Informationen here) zu verwenden. Dann

, da die bisherigen Antworten sagen, müssen Sie manuell UNIX_TIMESTAMP()

Verwandte Themen