-
Por lo general, no debe hacer ninguna de las dos cosas:los tipos de datos en la capa de la base de datos deben ser significativos (lo más posible) por sí mismos y no depender de su aplicación para interpretarlos. Como dice @Jim DeLaHunt , esto permite que la base de datos los manipule/interprete fácilmente desde SQL según sea necesario (y también le permite acceder fácilmente a los mismos datos desde otra base de código de aplicación en el futuro).
MySQL tiene cinco tipos temporales , solo dos de los cuales almacenan tanto una fecha como una hora:
DATETIME
yTIMESTAMP
.Como han aludido otros, la diferencia se reduce a si desea almacenar la zona horaria, aunque me parece una forma bastante confusa de verlo:
-
TIMESTAMP
utiliza la sesióntime_zone
variable para convertir la entrada en una marca de tiempo UTC y luego de nuevo para la salida:es útil para especificar un momento exacto en el tiempo; -
DATETIME
simplemente almacena la fecha y la hora sin tener en cuenta la zona horaria, como si se tomara una fotografía de un calendario y un reloj:es útil para especificar un evento que ocurre en la misma hora local a nivel mundial.
-
-
Tal como declararía cualquier otra columna, especifique el tipo de datos relevante después del nombre de la columna.
Cuidado con que
TIMESTAMP
tiene funciones adicionales, como actualización automática , que es posible que desee deshabilitar en la declaración de su columna si así lo desea. -
Usando uno de los tipos temporales anteriores, podrá hacer todo esto (usando funciones de fecha según sea necesario). La salida predeterminada de
TIMESTAMP
yDATETIME
tipos es una cadena en'YYYY-MM-DD HH:MM:SS'
formato.En particular, el "tiempo transcurrido" de comparar dos valores podría, por ejemplo, obtenerse con MySQL
TIMEDIFF()
función:SELECT TIMEDIFF(end, start) AS elapsed FROM my_table WHERE ...