Подтвердить что ты не робот

Временная метка с миллисекундной точностью: как сохранить их в MySQL

Мне нужно разработать приложение с использованием MySQL, и мне нужно сохранить такие значения, как "1412792828893", которые представляют временную метку, но с точностью до миллисекунды. То есть количество миллисекунд с 1.1.1970. Я объявляю строку как timestamp, но, к сожалению, это не сработало. Все значения установлены на 0000-00-00 00:00:00

CREATE TABLE IF NOT EXISTS `probability` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`segment_id` int(11) NOT NULL,
`probability` float NOT NULL,
`measured_at` timestamp NOT NULL,
`provider_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ;

Как должно быть объявление, чтобы иметь возможность сохранять значения метки времени с этой точностью?

4b9b3361

Ответ 1

Вам нужно быть в MySQL версии 5.6.4 или новее, чтобы объявлять столбцы с дробно-временными типами данных. Не уверен, что у вас есть правильная версия? Попробуйте SELECT NOW(3). Если вы получили сообщение об ошибке, у вас нет нужной версии.

Например, DATETIME(3) даст вам миллисекундное разрешение в ваших отметках времени, а TIMESTAMP(6) предоставит вам разрешение по микросекундам на отметке времени в стиле nix.

Прочтите это: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html

NOW(3) предоставит вам текущее время из вашей операционной системы MySQL с точностью до миллисекунды.

Если у вас есть несколько миллисекунд с Unix epoch, попробуйте это, чтобы получить значение DATETIME (3)

FROM_UNIXTIME(ms * 0.001)

Javascript timestamps, например, представлены в миллисекундах, поскольку Unix эпоха.

(Обратите внимание, что внутренняя дробная арифметика MySQL, такая как * 0.001, всегда обрабатывается как плавающая точка с двойной точностью IEEE754, поэтому вряд ли вы потеряете точность до того, как Солнце станет звездой белого карлика.)

Если вы используете более старую версию MySQL, и вам нужна точность по субсекунду времени, ваш лучший путь - это обновление. Все остальное заставит вас делать грязные обходные пути.

Если по какой-то причине вы не можете обновить, вы можете использовать столбцы BIGINT или DOUBLE для хранения временных меток Javascript, как если бы они были номерами. FROM_UNIXTIME(col * 0.001) будет работать нормально. Если вам нужно текущее время для хранения в таком столбце, вы можете использовать UNIX_TIMESTAMP() * 1000