Ответ 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