Przechowywanie czasu z milisekundami w bazie danych


10

Krótkie pytanie dotyczące przechowywania „czasu” w bazie danych. Rejestruję czas uruchamiania użytkowników w formacie 00: 00: 00: 00 (godziny, minuty, sekundy, milisekundy).

Pierwotnie zamierzałem go przechowywać, TIMEale potem zdałem sobie sprawę, że MySQL nie obsługuje milisekund w tym typie.

Będę przechowywać rzeczywisty czas pobrany ze stopera użytkowników, a nie czas, w którym uruchomili się i zakończyli (zostanie to obliczone przed włożeniem).

Jakiego rodzaju pola najlepiej użyć? Myślałam albo doublealbo float, ale nie jestem pewien, że będzie działać?

Odpowiedzi:


6

Osobiście używałbym typów całkowitych na czas trwania

Przykład: 340 000 milisekund to 340000 w kolumnie int bez znaku.

Dla mnie data, godzina, data itp. Dotyczą wyraźnych punktów w czasie. 340 sekund w tym kontekście nie ma znaczenia. Początek date/timepozwala oczywiście dodać czas trwania


3
Do tego celu służy standardowy intervaltyp danych SQL . Ale nie wszystkie DBMS (i zdecydowanie nie MySQL) obsługują to.
a_horse_w_no_name

Dzięki za odpowiedź, czy musiałbym przekonwertować go na standardowy format, ponieważ obecnie jest on w formacie 00: 00: 00: 00? Czy mogę ustawić kolumnę, aby zezwalała na ten typ formatu?
Elliott,

@Elliott: na wyświetlaczu można. To jest tylko numer inaczej
gbn

1
Zwróć uwagę, że Twój format to prawdopodobnie (lub powinien być dla czytelności) 00: 00: 00.000 (zwróć uwagę na kropkę zamiast dwukropka i 3 cyfry na milisekundy
Jannes

2

To zależy od tego, jak długo chcesz mierzyć. Jeśli nie będziesz nagrywać więcej niż 2 ^ 32 lub 4294967296 ms, zwykłe int bez znaku jest w porządku. To odpowiada około 50 dniom zegara, btw.

Jeśli przechowujesz uniksowe znaczniki czasu lub większe interwały, spójrz na użycie bigint. Daje to 8 bajtów miejsca lub możliwość rejestrowania czasów o długości 1,84467440737096e + 19 ms (czyli około 500 milionów lat)


1

Jeśli korzystasz z MySQL 5.6.4 lub nowszy, można użyć TIME(3), DATETIME(3)a TIMESTAMP(3)typy kolumn do przechowywania do 6 cyfr dziesiętnych (zamiast 3z liczbą cyfr ułamkowych co potrzeba). Część ułamkowa jest dodawana do ciągu czasu po kropce; Przykład: 2018-09-08 17:51:04.781.

Oficjalne odniesienie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.