Зберігання часу з мілісекундами в базі даних


10

Лише швидке запитання щодо зберігання "часу" в базі даних. Я реєструю час запуску користувачів у форматі 00: 00: 00: 00 (години, хвилини, секунди, мілісекунди).

Я спочатку збирався зберігати його як, TIMEале потім зрозумів, що MySQL не підтримує мілісекунд у цьому типі.

Я зберігатиму фактичний час, взятий у секундоміра користувачів, а не час їх запуску та закінчення (це буде обчислюватися перед тим, як вставити).

Що було б найкращим типом поля для використання? Я думав, doubleабо float, але я не впевнений, що це спрацює?

Відповіді:


6

Особисто я би використовував цілі типи протягом тривалості

Приклад: 340 000 мілісекунд - 340000 у стовпці, що не має підпису.

Для мене, дата, час, дата тощо - це явні моменти часу. 340 секунд в цьому контексті безглуздо. Маючи початок date/timeдозволяє в термін буде додано звичайно


3
Для цього є стандартний intervalтип даних SQL . Але не всі СУБД (і, безумовно, не MySQL) підтримують це.
a_horse_with_no_name

Дякую за вашу відповідь, чи потрібно мені перетворити його у стандартний формат, оскільки він зараз є у форматі 00: 00: 00: 00? Чи можу я встановити стовпчик, щоб дозволити цей тип формату?
Елліотт

@Elliott: для відображення можна. Це просто число, інакше
gbn

1
Зверніть увагу , що ваш формат , ймовірно , є (або має бути для читання) 00: 00: 00,000 (зверніть увагу на точку замість двокрапки і 3 цифри для мілісекунди.
Янній

2

Це залежить від того, як довго ви хочете вимірювати. Якщо ви не записуватимете жодного разу довше 2 ^ 32 або 4294967296 мс, звичайний неподписаний int просто чудово. Це відповідає приблизно 50 дням годинного часу, btw.

Якщо ви зберігали часові позначки Unix або більші інтервали, то подивіться на використання bigint. Це дає вам 8 байтів простору або можливість записувати час у розмірі 1,84467440737096e + 19 мс (що приблизно 500 мільйонів років)


1

Якщо ви використовуєте MySQL 5.6.4 або пізнішої версії, ви можете використовувати TIME(3), DATETIME(3)і TIMESTAMP(3)типи стовпців для зберігання до 6 цифр дробової (замінити 3з кількістю дрібних цифр , вам потрібно). Дробова частина додається до часового рядка після крапки; Приклад: 2018-09-08 17:51:04.781.

Офіційна довідка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.