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