Como defino uma coluna de carimbo de data / hora cujo valor padrão é o horário UTC atual?
O MySQL usa a UTC_TIMESTAMP()
função para o carimbo de data / hora UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Então eu tentei:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
E outras variações, como UTC_TIMESTAMP()
, mas sem sucesso.
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
). A partir da mesma página de documentação:(This does not occur for other types such as DATETIME.)
.Respostas:
Para acompanhar o comentário do @ ypercube que
CURRENT_TIMESTAMP
é armazenado como UTC, mas recuperado como o fuso horário atual, você pode afetar a configuração de fuso horário do servidor com a opção --default_time_zone para recuperação. Isso permite que sua recuperação esteja sempre no UTC.Por padrão, a opção é 'SYSTEM', que é como o fuso horário do sistema é definido (que pode ou não ser UTC!):
Você pode definir isso dinamicamente:
Ou permanentemente no seu my.cnf:
Reinicie seu servidor e você verá a alteração:
fonte
default_time_zone
para uma tabela ou banco de dados específico? Obrigado.Você não pode especificar
UTC_TIMESTAMP
como padrão para especificar propriedades automáticas. Você deve usar apenas o padrãoCURRENT_TIMESTAMP
e asON UPDATE CURRENT_TIMESTAMP
cláusulas.Além disso, você pode INSERIR
UTC_TIMESTAMP
valores como este para uma tabela:A consulta INSERT seria assim para inserir UTC_TImeSTAMP:
fonte
Minha solução é com um gatilho:
Cada nova linha inserida terá o carimbo de data e hora no UTC.
fonte
para o mariadb, apenas as soluções globais my.cnf funcionaram
para o mariadb 10.2, a solução permanente de @Derek Downey neste post.
para mariadb 10.0 (eu tinha 10.0.32), consulte https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
ambas as definições podem coexistir no my.cnf do mariadb 10.2, mas não tenho mais o mariadb 10.0.
espero que isso ajude você.
fonte