Wie lege ich eine Zeitstempelspalte fest, deren Standardwert die aktuelle UTC-Zeit ist?
MySQL verwendet die UTC_TIMESTAMP()
Funktion für den UTC-Zeitstempel:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Also habe ich versucht:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
Und andere Variationen mögen UTC_TIMESTAMP()
, aber ohne Erfolg.
CURRENT_TIMESTAMP
?MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval.
CURRENT_TIMESTAMP
). Aus der gleichen Dokumentationsseite:(This does not occur for other types such as DATETIME.)
.Antworten:
Um den
CURRENT_TIMESTAMP
als UTC gespeicherten, aber als aktuelle Zeitzone abgerufenen Kommentar von @ ypercube zu ergänzen , können Sie die Zeitzoneneinstellung Ihres Servers mit der Option --default_time_zone für den Abruf beeinflussen. Auf diese Weise können Sie immer in UTC abrufen.Standardmäßig ist die Option 'SYSTEM'. Dies ist die Einstellung Ihrer Systemzeitzone (die UTC sein kann oder nicht!):
Sie können dies dynamisch einstellen:
Oder dauerhaft in deiner my.cnf:
Starten Sie Ihren Server neu und Sie werden die Änderung sehen:
quelle
default_time_zone
für eine bestimmte Tabelle oder Datenbank anzugeben ? Vielen Dank.Sie können nicht
UTC_TIMESTAMP
als Standard festlegen, dass automatische Eigenschaften angegeben werden. Sie sollten nur DEFAULTCURRENT_TIMESTAMP
undON UPDATE CURRENT_TIMESTAMP
Klauseln verwenden.Sie können auch
UTC_TIMESTAMP
Werte wie diese für eine Tabelle einfügen :Die INSERT-Abfrage würde folgendermaßen aussehen, um UTC_TImeSTAMP einzufügen:
quelle
Meine Lösung ist mit einem Auslöser:
Dann hat jede neu eingefügte Zeile den Zeitstempel in UTC.
quelle
für mariadb funktionierten nur die globalen my.cnf-lösungen
für mariadb 10.2 die dauerhafte lösung von @Derek Downey in diesem post.
Für Mariadb 10.0 (ich hatte 10.0.32), siehe https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
beide definitionen können in my.cnf von mariadb 10.2 koexistieren, aber ich habe mariadb 10.0 nicht mehr.
hoffe das wird dir helfen.
quelle