Метка времени с точностью до миллисекунды: как сохранить их в 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`)
) ;


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

699   1  

1 ответ:

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

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

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

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

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

FROM_UNIXTIME(ms * 0.001)

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

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

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

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

Comments

    Ничего не найдено.