Zeit mit Millisekunden in der Datenbank speichern


10

Nur eine kurze Frage zum Speichern von "Zeit" in einer Datenbank. Ich protokolliere die Zeit von Benutzerläufen im Format 00: 00: 00: 00 (Stunden, Minuten, Sekunden, Millisekunden).

Ich wollte es ursprünglich so speichern, TIMEaber dann wurde mir klar, dass MySQL Millisekunden in diesem Typ nicht unterstützt.

Ich werde die tatsächliche Zeit speichern, die von der Stoppuhr des Benutzers benötigt wird, nicht die Zeit, zu der sie ausgeführt und beendet wurden (dies wird vor dem Einfügen berechnet).

Was wäre der beste Feldtyp? Ich dachte entweder doubleoder float, aber ich bin nicht sicher, ob das funktionieren würde?

Antworten:


6

Persönlich würde ich für die Dauer ganzzahlige Typen verwenden

Beispiel: 340.000 Millisekunden sind 340000 in einer int-Spalte ohne Vorzeichen.

Für mich sind Datum / Uhrzeit, Uhrzeit, Datum usw. explizite Zeitpunkte. 340 Sekunden sind in diesem Zusammenhang bedeutungslos. Mit einem Start date/timekann natürlich die Dauer hinzugefügt werden


3
Zu intervaldiesem Zweck gibt es einen Standard-SQL- Datentyp. Aber nicht alle DBMS (und definitiv nicht MySQL) unterstützen dies.
a_horse_with_no_name

Vielen Dank für Ihre Antwort. Muss ich es in ein Standardformat konvertieren, da es derzeit im Format 00: 00: 00: 00 vorliegt? Könnte ich die Spalte so einstellen, dass diese Art von Format zulässig ist?
Elliott

@ Elliott: Für die Anzeige könnten Sie. Es ist nur eine Zahl anders
gbn

1
Beachten Sie, dass Ihr Format wahrscheinlich 00: 00: 00.000 ist (oder sein sollte) (beachten Sie den Punkt anstelle des Doppelpunkts und 3 Stellen für Millisekunden.
Jannes

2

Es hängt davon ab, wie lange Sie messen möchten. Wenn Sie nicht länger als 2 ^ 32 oder 4294967296 ms aufnehmen, ist ein reguläres int ohne Vorzeichen in Ordnung. Das entspricht übrigens ungefähr 50 Tagen Uhrzeit.

Wenn Sie Unix-Zeitstempel oder größere Intervalle gespeichert haben, sollten Sie Bigint verwenden. Dies gibt Ihnen 8 Byte Speicherplatz oder die Möglichkeit, Zeiten mit einer Länge von 1,84467440737096e + 19 ms (was ungefähr 500 Millionen Jahren entspricht) aufzuzeichnen.


1

Wenn Sie MySQL 5.6.4 oder höher können Sie die verwenden TIME(3), DATETIME(3)und TIMESTAMP(3)Spaltentypen bis 6 Nachkommastellen zu speichern (ersetzen 3mit der Anzahl der Nachkommastellen müssen Sie). Ein Bruchteil wird nach dem Punkt zur Zeitzeichenfolge hinzugefügt. Beispiel : 2018-09-08 17:51:04.781.

Offizielle Referenz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.