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ć, TIME
ale 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 double
albo float
, ale nie jestem pewien, że będzie działać?
źródło
interval
typ danych SQL . Ale nie wszystkie DBMS (i zdecydowanie nie MySQL) obsługują to.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)
źródło
Jeśli korzystasz z MySQL 5.6.4 lub nowszy, można użyć
TIME(3)
,DATETIME(3)
aTIMESTAMP(3)
typy kolumn do przechowywania do 6 cyfr dziesiętnych (zamiast3
z 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
źródło