Memorizzazione del tempo con millisecondi nel database


10

Solo una breve domanda per quanto riguarda la memorizzazione di "tempo" in un database. Sto registrando il tempo di esecuzione degli utenti nel formato 00: 00: 00: 00 (ore, minuti, secondi, millisecondi).

Inizialmente lo avrei archiviato come, TIMEma poi ho capito che MySQL non supporta millisecondi in questo tipo.

Memorizzerò il tempo effettivo impiegato dal cronometro degli utenti, non il tempo in cui sono stati eseguiti e terminati (questo verrà calcolato prima di essere inserito).

Quale sarebbe il miglior tipo di campo da usare? Stavo pensando o doubleo float, ma non sono sicuro che avrebbe funzionato?

Risposte:


6

Personalmente, userei i tipi interi per la durata

Esempio: 340.000 millisecondi è 340000 in una colonna int senza segno.

Per me, datetime, ora, data ecc. Sono per punti espliciti nel tempo. 340 secondi non ha senso in quel contesto. Avere un inizio date/timeconsente la durata da aggiungere, naturalmente,


3
Esiste un intervaltipo di dati SQL standard proprio per questo scopo. Ma non tutti i DBMS (e sicuramente non MySQL) lo supportano.
a_horse_with_no_name

Grazie per la tua risposta, dovrei convertirlo in un formato standard come attualmente è nel formato 00: 00: 00: 00? Posso impostare la colonna per consentire quel tipo di formato?
Elliott,

@Elliott: per la visualizzazione, potresti. Altrimenti è solo un numero
gbn

1
Nota che il tuo formato probabilmente è (o dovrebbe essere leggibile) 00: 00: 00.000 (nota il punto anziché i due punti e 3 cifre per millisecondi.
Jannes,

2

Dipende da quanto tempo vuoi misurare. Se non registrerai per periodi superiori a 2 ^ 32 o 4294967296 ms di un normale int senza segno va bene. Ciò corrisponde a circa 50 giorni di tempo, tra l'altro.

Se stavi memorizzando timestamp unix o intervalli più grandi, guarda usando bigint. Questo ti dà 8 byte di spazio o la possibilità di registrare tempi lunghi a 1.84467440737096e + 19 ms (che è di circa 500 milioni di anni)


1

Se si utilizza MySQL 5.6.4 o versioni successive, è possibile utilizzare la TIME(3), DATETIME(3)e TIMESTAMP(3)tipi di colonne di memorizzare fino a 6 cifre decimali (sostituire 3con il numero di cifre decimali è necessario). La parte frazionaria viene aggiunta alla stringa temporale dopo il punto; Esempio: 2018-09-08 17:51:04.781.

Riferimento ufficiale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.