目次
1. ¿Qué es DATETIME
en MySQL?
El tipo de dato DATETIME
en MySQL se utiliza para manejar fechas y horas de manera conjunta. La gestión de fechas y tiempos en bases de datos es esencial para aplicaciones como registros de logs o sistemas de reservas. El tipo DATETIME
almacena fecha y hora en un solo campo, y puede abarcar un rango amplio de valores. Su rango va desde '1000-01-01 00:00:00'
hasta '9999-12-31 23:59:59'
, con soporte para fracciones de segundos.2. Descripción general de los tipos de datos de fecha y hora en MySQL
2.1 Tipos de datos para manejar fecha y hora
MySQL ofrece varios tipos de datos para trabajar con fechas y horas:DATE
: Maneja solo la fecha (año, mes y día). Rango:'1000-01-01'
a'9999-12-31'
.TIME
: Maneja solo la hora. Rango:'-838:59:59'
a'838:59:59'
.DATETIME
: Maneja fecha y hora combinadas. Rango:'1000-01-01 00:00:00'
a'9999-12-31 23:59:59'
.TIMESTAMP
: Almacena la marca de tiempo UNIX. Rango:'1970-01-01 00:00:01'
a'2038-01-19 03:14:07'
.
2.2 Diferencias entre DATETIME
y TIMESTAMP
Aunque DATETIME
y TIMESTAMP
son similares, presentan diferencias clave:- Zona horaria:
DATETIME
guarda un valor fijo independiente de la zona horaria. En cambio,TIMESTAMP
se convierte a UTC al almacenarse y se ajusta a la zona horaria del servidor al recuperarse. Por ello,DATETIME
es ideal para fechas fijas como la de un evento, mientras queTIMESTAMP
es más adecuado para registros dependientes de la zona horaria, como logs. - Formato de almacenamiento:
DATETIME
se almacena tal cual, mientras queTIMESTAMP
se guarda como marca de tiempo UNIX, lo cual implica que su representación puede verse afectada por la configuración de zona horaria del servidor.
3. Uso de DATETIME
en MySQL
3.1 Creación de una columna DATETIME
Para crear una columna con tipo DATETIME
, se utiliza la siguiente sintaxis SQL:CREATE TABLE sample_table (
event_time DATETIME
);
En este ejemplo, se crea la columna event_time
en la tabla sample_table
.3.2 Inserción de valores DATETIME
Los valores de DATETIME
pueden insertarse en distintos formatos. El formato básico es 'YYYY-MM-DD HH:MM:SS'
. Ejemplo:INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');
También se permiten otros formatos:'YY-MM-DD HH:MM:SS'
: con el año en dos dígitos.'YYYYMMDDHHMMSS'
: sin caracteres separadores.
INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);
Cuando el año se indica con dos dígitos, '70-99'
se interpreta como 1970-1999
y '00-69'
como 2000-2069
.3.3 Recuperación de valores DATETIME
Al consultarse, MySQL devuelve DATETIME
en el formato 'YYYY-MM-DD HH:MM:SS'
. Ejemplo:SELECT event_time FROM sample_table;
4. Manejo de fracciones de segundo
4.1 Precisión de DATETIME
MySQL permite incluir fracciones de segundo en DATETIME
mediante el parámetro fsp
, que acepta valores de 0 a 6. Ejemplo con 3 decimales:CREATE TABLE precise_times (
event_time DATETIME(3)
);
4.2 Inserción con fracciones de segundo
Ejemplo de inserción con milisegundos:INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');

5. Mejores prácticas con DATETIME
5.1 Cuándo usar DATETIME
vs TIMESTAMP
- Usar
DATETIME
: para fechas fijas independientes de la zona horaria (ej. inicio de un evento, fecha de reserva). - Usar
TIMESTAMP
: para fechas ligadas a la zona horaria del servidor (ej. creación o actualización de registros).
5.2 Gestión de zonas horarias
ComoDATETIME
no tiene en cuenta zonas horarias, la aplicación debe gestionarlas. TIMESTAMP
sí las considera automáticamente, lo que lo hace más adecuado para entornos internacionales.6. Errores comunes y cómo evitarlos
6.1 Fechas nulas y valores inválidos
Si se intenta insertar un valorDATETIME
inválido, MySQL lo guarda como '0000-00-00 00:00:00'
. Se recomienda implementar validaciones para impedirlo.6.2 Uso incorrecto de la precisión
Configurar mal la precisión de fracciones de segundo (fsp
) puede causar resultados no deseados. Solo especifica precisión cuando sea necesaria.7. Conclusión
Hemos revisado el tipoDATETIME
en MySQL: su definición, diferencias con TIMESTAMP
, uso de zonas horarias, fracciones de segundo y errores comunes. Con estas prácticas, podrás manejar fechas y horas en bases de datos de forma eficiente y confiable.8. Preguntas frecuentes (FAQ)
Q1: ¿Cuál es la principal diferencia entre DATETIME
y TIMESTAMP
?
DATETIME
guarda valores fijos sin depender de la zona horaria. TIMESTAMP
se almacena en UTC y se ajusta a la zona horaria del servidor al consultarse.Q2: ¿Cómo guardar fracciones de segundo en DATETIME
?
Define la columna con un valor de precisión (fsp
), por ejemplo DATETIME(3)
, para permitir hasta milisegundos.Q3: ¿Cuándo usar DATETIME
y cuándo TIMESTAMP
?
Usa DATETIME
para fechas fijas como reservas o eventos. Usa TIMESTAMP
para registros sujetos a la zona horaria del servidor, como creación o actualización de datos.