Сохранение времени в миллисекундах в базе данных

10

Просто быстрый вопрос относительно хранения «времени» в базе данных. Я регистрирую время запуска пользователей в формате 00: 00: 00: 00 (часы, минуты, секунды, миллисекунды).

Первоначально я собирался сохранить его как, TIMEно потом я понял, что MySQL не поддерживает миллисекунды в этом типе.

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

Какой тип поля лучше всего использовать? Я думал или doubleили float, но я не уверен, что это сработает?

Elliott
источник

Ответы:

6

Лично я бы использовал целочисленные типы для продолжительности

Пример: 340 000 миллисекунд - это 340000 в столбце типа unsigned.

Для меня дата, время, дата и т. Д. Предназначены для явных моментов времени. 340 секунд не имеет смысла в этом контексте. Имея начало date/timeпозволяет в срок будет добавлен конечно

ГБН
источник
3
Для intervalэтой цели существует стандартный тип данных SQL . Но не все СУБД (и определенно не MySQL) поддерживают это.
a_horse_with_no_name
Спасибо за ваш ответ, мне нужно будет преобразовать его в стандартный формат, как в настоящее время в формате 00: 00: 00: 00? Могу ли я установить столбец, чтобы разрешить этот тип формата?
Эллиотт
@ Эллиотт: для отображения, вы могли бы. В противном случае это просто число
gbn
1
Обратите внимание, что ваш формат, вероятно, (или должен быть для удобства чтения) 00: 00: 00.000 (обратите внимание на точку вместо двоеточия и 3 цифры для миллисекунд.
Янн
2

Это зависит от того, как долго вы хотите измерить. Если вы не будете записывать в любое время дольше, чем 2 ^ 32 или 4294967296 мс, чем обычное беззнаковое целое, это просто хорошо. Это соответствует примерно 50 дням времени между прочим.

Если вы хранили метки времени Unix или большие интервалы, посмотрите на использование bigint. Это дает вам 8 байт пространства или возможность записывать время, равное 1,84467440737096e + 19 мс (что примерно составляет 500 миллионов лет)

atxdba
источник
1

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

Официальная ссылка

тонкость
источник