Almacenamiento de tiempo con milisegundos en la base de datos


10

Solo una pregunta rápida sobre el almacenamiento del "tiempo" en una base de datos. Estoy registrando el tiempo de ejecución de los usuarios en el formato 00: 00: 00: 00 (horas, minutos, segundos, milisegundos).

Originalmente lo iba a almacenar, TIMEpero luego me di cuenta de que MySQL no admite milisegundos en este tipo.

Estaré almacenando el tiempo real tomado del cronómetro de los usuarios, no el tiempo en que corrieron y terminaron (esto se calculará antes de ser insertado).

¿Cuál sería el mejor tipo de campo para usar? Estaba pensando en doubleo float, pero no estoy seguro de que funcionaría.

Respuestas:


6

Personalmente, usaría tipos enteros para la duración

Ejemplo: 340,000 milisegundos es 340000 en una columna int sin signo.

Para mí, datetime, time, date, etc. son para puntos explícitos en el tiempo. 340 segundos no tiene sentido en ese contexto. Tener un inicio date/timepermite agregar la duración, por supuesto


3
Hay un intervaltipo de datos SQL estándar para este propósito. Pero no todos los DBMS (y definitivamente no MySQL) lo admiten.
a_horse_with_no_name

Gracias por su respuesta, ¿necesitaría convertirlo a un formato estándar ya que actualmente está en el formato 00: 00: 00: 00? ¿Podría configurar la columna para permitir ese tipo de formato?
Elliott

@Elliott: para mostrar, podrías. De lo contrario
gbn

1
Tenga en cuenta que su formato probablemente sea (o debería ser para facilitar la lectura) 00: 00: 00,000 (tenga en cuenta el punto en lugar de dos puntos y 3 dígitos por milisegundos.
Jannes

2

Depende de cuánto tiempo quieras medir. Si no va a grabar más de 2 ^ 32, o 4294967296 ms, un int sin signo normal está bien. Eso corresponde a unos 50 días de reloj, por cierto.

Si estaba almacenando marcas de tiempo Unix o intervalos más grandes, mire usando bigint. Esto le da 8 bytes de espacio, o la capacidad de registrar tiempos tan largos como 1.84467440737096e + 19 ms (que es aproximadamente 500 millones de años)


1

Si utiliza MySQL 5.6.4 o posterior, puede utilizar el TIME(3), DATETIME(3)y TIMESTAMP(3)los tipos de columnas para almacenar hasta 6 dígitos fraccionarios (reemplaza 3con el número de dígitos fraccionarios que necesita). La parte fraccional se agrega a la cadena de tiempo después del punto; ejemplo: 2018-09-08 17:51:04.781.

Referencia oficial

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.