Sobes.tech
Junior

Describe la diferencia entre los tipos de datos DATETIME y TIMESTAMP.

sobes.tech AI

Respuesta de la IA

Las principales diferencias entre DATETIME y TIMESTAMP en la mayoría de las bases de datos SQL (por ejemplo, MySQL) son las siguientes:

  • Almacenamiento:

    • DATETIME almacena año, mes, día, hora, minuto, segundo.
    • TIMESTAMP almacena la cantidad de segundos transcurridos desde el inicio de la época Unix (1 de enero de 1970 UTC).
  • Rango de valores:

    • DATETIME generalmente tiene un rango más amplio de fechas (por ejemplo, desde '1000-01-01 00:00:00' hasta '9999-12-31 23:59:59').
    • TIMESTAMP tiene un rango limitado, dependiendo de la representación de 32 bits o 64 bits, generalmente hasta 2038 para 32 bits.
  • Zona horaria:

    • DATETIME no depende de la zona horaria y guarda el valor exacto ingresado.
    • TIMESTAMP se convierte de la zona horaria actual a UTC al guardar y de vuelta al extraer, por lo que su valor depende de la zona horaria del cliente.
  • Tamaño:

    • El tamaño de almacenamiento puede variar ligeramente, pero a menudo TIMESTAMP es menor (4 bytes) en comparación con DATETIME (8 bytes).
  • Actualización automática:

    • TIMESTAMP puede configurarse para actualizarse automáticamente al cambiar la fila (si se usa por defecto o se especifica ON UPDATE CURRENT_TIMESTAMP), lo cual es útil para campos que rastrean la última modificación. DATETIME no tiene esta capacidad incorporada (aunque se puede lograr mediante triggers).

Tabla comparativa:

Característica DATETIME TIMESTAMP
Formato de almacenamiento Año, mes, día, hora, minuto, segundo Segundos desde la época Unix (UTC)
Zona horaria No depende de la zona horaria Depende de la zona horaria del cliente
Rango de valores Generalmente más amplio, hasta el año 9999 Limitado, generalmente hasta 2038 (para 32-bit)
Actualización automática No (integrada) Sí (opcional, ON UPDATE CURRENT_TIMESTAMP)
Tamaño típico 8 bytes 4 bytes

Ejemplo de SQL para crear tablas:

-- Ejemplo de tabla con DATETIME
CREATE TABLE events_datetime (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    event_time DATETIME
);

-- Ejemplo de tabla con TIMESTAMP
CREATE TABLE events_timestamp (
    id INT PRIMARY KEY,
    event_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Establecimiento automático del tiempo de creación
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- Actualización automática al cambiar
);