¿Cómo configuro una columna de marca de tiempo cuyo valor predeterminado es la hora UTC actual?
MySQL usa la UTC_TIMESTAMP()
función para la marca de tiempo UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Entonces he intentado:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
Y otras variaciones, como UTC_TIMESTAMP()
, pero sin éxito.
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
). De la misma página de documentación:(This does not occur for other types such as DATETIME.)
.Respuestas:
Para seguir el comentario de @ypercube que
CURRENT_TIMESTAMP
se almacena como UTC pero se recupera como la zona horaria actual, puede afectar la configuración de la zona horaria de su servidor con la opción --default_time_zone para la recuperación. Esto permite que su recuperación esté siempre en UTC.Por defecto, la opción es 'SISTEMA', que es cómo se configura la zona horaria de su sistema (¡que puede o no ser UTC!):
Puede configurar esto dinámicamente:
O permanentemente en tu my.cnf:
Reinicie su servidor, y verá el cambio:
fuente
default_time_zone
una tabla o base de datos específica? Gracias.No puede especificar de
UTC_TIMESTAMP
forma predeterminada para especificar propiedades automáticas. Debe usar solo DEFAULTCURRENT_TIMESTAMP
yON UPDATE CURRENT_TIMESTAMP
cláusulas.También puede INSERTAR
UTC_TIMESTAMP
valores como este para una tabla:La consulta INSERT sería así para insertar UTC_TImeSTAMP:
fuente
Mi solución es con un disparador:
Luego, cada nueva fila insertada tendrá la marca de tiempo en UTC.
fuente
para mariadb solo las soluciones globales my.cnf funcionaron
para mariadb 10.2, la solución permanente de @Derek Downey en esta publicación.
para mariadb 10.0 (tenía 10.0.32), consulte https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
ambas definiciones pueden coexistir en my.cnf de mariadb 10.2, pero ya no tengo mariadb 10.0.
Espero que esto te ayudará.
fuente