sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la mejor manera de almacenar la fecha/hora en MySql?

  1. 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 y TIMESTAMP .

    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ón time_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.

  2. 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.

  3. Usando uno de los tipos temporales anteriores, podrá hacer todo esto (usando funciones de fecha según sea necesario). La salida predeterminada de TIMESTAMP y DATETIME 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  ...