Besseren Weg, um sicher zu legen Sie die UTC-Zeit Wert in der mySQL TIMESTAMP-variable?
Meiner Anwendung möchte zum einfügen einer timestamp-Wert in eine TIMESTAMP-variable in einer mySQL-Datenbank. Der timestamp-Wert ist eine UTC-Zeit in den üblichen "YYYY-MM-DD HH:MM:SS" - format. Das problem ist, dass mein SQL-server ist so konfiguriert, verwenden Sie die SYSTEM-Zeit (SELECT @@global.time_zone
sagt SYSTEM
), und die system Zeitzone Europe/London (der server läuft Ubuntu 14.04), also mySQL hat ein Tageslicht-Einsparung-Konvertierung und speichert den Wert einer Stunde aus, was es sein sollte. (Ich denke, wenn ich in einer anderen Zeitzone, z.B. CST dann würde ich ein unerwünschtes timezone offset-als auch die Sommerzeit-Stunde).
Um mySQL, Das Richtige zu tun es scheint, dass ich brauche, um verdeckte den UTC-Zeitstempel in system-Zeit, bevor ich legen Sie es so, dass mySQL konvertieren können, es aus dem system Zeit, um die UTC-Zeit, bevor es speichert Sie intern. Dieses Stück code hat den gewünschten Effekt:-
mysql> select timestamp("2015-05-06 12:34:56")+CURRENT_TIMESTAMP-UTC_TIMESTAMP;
+------------------------------------------------------------------+
| timestamp("2015-05-06 12:34:56")+CURRENT_TIMESTAMP-UTC_TIMESTAMP |
+------------------------------------------------------------------+
| 20150506133456.000000 |
+------------------------------------------------------------------+
Ich werde mit diesem Lauf für jetzt, aber es scheint ein bisschen wie ein Theater, so gibt es eine bessere Möglichkeit?
[Bearbeiten] eine Weitere Runde von RTFM ' Ing gab mir diese Idee...
mysql> select CONVERT_TZ("2015-05-06 12:34:56", "+00:00", "SYSTEM");
+-------------------------------------------------------+
| CONVERT_TZ("2015-05-06 12:34:56", "+00:00", "SYSTEM") |
+-------------------------------------------------------+
| 2015-05-06 13:34:56 |
+-------------------------------------------------------+
Das sieht viel sauberer aus. Irgendwelche besseren Ideen?
- Sie konnte einfach legen Sie die mysql-server-Zeitzone auf gmt, entweder Global, oder nur für Ihre Sitzung
- Ich könnte wenn ich könnte, aber ich kann nicht 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie wahrscheinlich verwenden Sie die
CONVERT_TZ
Funktion verwendet die angegebene Zeitzone zu analysieren, das Datum statt der system-Zeitzone:Den lokalen Zeit-Wert wird je nachdem, welches system die Abfrage ausgeführt wird. Aber die UNIX-timestamp-Wert wird identisch sein.
Können Sie dann legen Sie die Ortszeit-Wert der timestamp-Spalte; MySQL speichern wird der Wert nach der Konvertierung.
select CONVERT_TZ('2015-12-31 23:59:59', "+00:00", "SYSTEM")
Das Richtige tut, während blind hinzufügen einer Stunde nicht.