MySQL / MariaDB: ¿Es Mejor Usar datetime O timestamp?



Al elegir el tipo de dato de una columna podemos entrar en una duda acerca de qué tipo de datos es el adecuado para nuestro caso de uso, si datetime o timestamp.

El uso mas frecuente de timestamp en MySQL / MariaDB es guardar un registro de cambios de los registroso o tuplas de la base de datos, y son frecuentemente actualizados en cada cambio del registro. Comparado con datetime, hay una diferencia muy importante que muchos DBA ignoran.

Una diferencia importante es que datetime representa una fecha, como se encuentra en un calendario, y un tiempo, como puede ser visto en un reloj. Mientras que timestamp representa un punto definido en el tiempo.

Esta diferencia es muy importante si tu aplicación maneja zonas horarias. Por ejemplo, ¿hace cuanto fue exactamente la fecha 2010-01-01 17:52:00? Esto dependerá de la zona horario en que te encuentres actualmente. Pero si hablamos de X cantidad de segundos desde el 1970-01-01 00:00:00 UTC entonces estamos hablando de un punto exacto en el tiempo. Esto último es lo que representa timestamp.

En MySQL / MariaDB 5 y superior, timestamp es convertido de la zona horaria actual a UTC para el almacenamiento, y convertido de UTC a la hora local al recuperarse. Por defecto, la zona local de cada conexión es la hora del servidor, pero puede aplicarse una configuración para que la zona se establezca por cada conexión.

Como puntos adicionales, con datetime puedes realizar operaciones como:

SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)

y puedes convertirlo a timestamp de UNIX usando:

SELECT UNIX_TIMESTAMP(my_datetime)

Regla de Oro


Si aún no te decides que tipo de datos es el mejor para tu caso, puedes seguir esta práctica regla:

  • timestamp: Para meta-datos de cada registro (fecha creada o modificada)
  • datetime: Para todos los otros casos

No hay comentarios:

Publicar un comentario