Armazenando tempo com milissegundos no banco de dados

10

Apenas uma pergunta rápida sobre o armazenamento de "tempo" em um banco de dados. Estou registrando o tempo das execuções dos usuários no formato 00: 00: 00: 00 (horas, minutos, segundos, milissegundos).

Originalmente, eu ia armazená-lo, TIMEmas percebi que o MySQL não suporta milissegundos nesse tipo.

Armazenarei o tempo real do cronômetro dos usuários, não o tempo em que eles foram executados e finalizados (isso será calculado antes de ser inserido).

Qual seria o melhor tipo de campo a ser usado? Eu estava pensando em um doubleou outro float, mas não tenho certeza se isso funcionaria?

Elliott
fonte

Respostas:

6

Pessoalmente, eu usaria tipos inteiros para a duração

Exemplo: 340.000 milissegundos é 340000 em uma coluna int não assinada.

Para mim, data e hora, hora, data etc são para pontos explícitos no tempo. 340 segundos não tem sentido nesse contexto. Ter um início date/timepermite que a duração seja adicionada, é claro

gbn
fonte
3
Há um intervaltipo de dados SQL padrão para esse fim. Mas nem todos os DBMS (e definitivamente não o MySQL) suportam isso.
a_horse_with_no_name
Obrigado pela sua resposta, precisaria convertê-lo para um formato padrão, pois atualmente ele está no formato 00: 00: 00: 00? Posso definir a coluna para permitir esse tipo de formato?
Elliott
@ Elliott: para exibição, você poderia. Caso contrário, é apenas um número
gbn
11
Note-se que o formato provavelmente é (ou deveria ser para facilitar a leitura) 00: 00: 00.000 (observe o ponto em vez de dois pontos e 3 dígitos para milissegundos.
Janes
2

Depende de quanto tempo você deseja medir. Se você não estiver gravando mais de 2 ^ 32 ou 4294967296 ms do que um int não assinado normal, tudo bem. Isso corresponde a cerca de 50 dias de tempo, btw.

Se você estava armazenando carimbos de data / hora unix ou intervalos maiores, veja usando bigint. Isso fornece 8 bytes de espaço, ou a capacidade de registrar tempos de 1.84467440737096e + 19 ms (aproximadamente 500 milhões de anos)

atxdba
fonte
1

Se você usa o MySQL 5.6.4 ou posterior, você pode usar a TIME(3), DATETIME(3)e TIMESTAMP(3)tipos de colunas para armazenar até 6 dígitos fracionários (substitua 3com o número de dígitos fracionários que você precisa). A parte fracionária é adicionada à sequência de tempo após ponto; exemplo: 2018-09-08 17:51:04.781.

Referência oficial

Finesse
fonte