Jak ustawić kolumnę datownika, której domyślną wartością jest bieżący czas UTC?
MySQL używa UTC_TIMESTAMP()
funkcji znacznika czasu UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Więc próbowałem:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
I inne warianty UTC_TIMESTAMP()
, ale bez powodzenia.
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
). Z tej samej strony dokumentacja:(This does not occur for other types such as DATETIME.)
.Odpowiedzi:
Aby postępować zgodnie z komentarzem @ ypercube, który
CURRENT_TIMESTAMP
jest przechowywany jako UTC, ale jest pobierany jako bieżąca strefa czasowa, możesz wpłynąć na ustawienie strefy czasowej swojego serwera za pomocą opcji --default_time_zone do pobierania. Pozwala to na pobieranie zawsze w UTC.Domyślnie opcją jest „SYSTEM”, czyli sposób ustawiania strefy czasowej systemu (która może, ale nie musi być UTC!):
Możesz ustawić to dynamicznie:
Lub na stałe w twoim my.cnf:
Uruchom ponownie serwer, a zobaczysz zmianę:
źródło
default_time_zone
konkretną tabelę lub bazę danych? Dzięki.Nie można określić
UTC_TIMESTAMP
domyślnie, aby określić właściwości automatyczne, należy używać tylko DOMYŚLNYCHCURRENT_TIMESTAMP
iON UPDATE CURRENT_TIMESTAMP
klauzul.Możesz jednak WSTAWIĆ
UTC_TIMESTAMP
takie wartości dla tabeli:Zapytanie INSERT wyglądałoby tak, aby wstawić UTC_TImeSTAMP:
źródło
Moje rozwiązanie ma wyzwalacz:
Następnie każdy nowy wstawiony wiersz będzie miał znacznik czasu w UTC.
źródło
dla mariadb działały tylko globalne rozwiązania my.cnf
dla mariadb 10.2, trwałe rozwiązanie @Derek Downey w tym poście.
mariadb 10.0 (miałem 10.0.32), patrz https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
obie definicje mogą współistnieć w my.cnf mariadb 10.2, ale nie mam już mariadb 10.0.
mam nadzieję, że ci to pomoże.
źródło