Marca de tiempo con una precisión de milisegundos: cómo guardarlos en MySQL

Tengo que desarrollar una aplicación usando MySQL y tengo que guardar valores como “1412792828893” que representan una marca de tiempo pero con una precisión de un milisegundo. Es decir, la cantidad de milisegundos desde 1.1.1970. Declaro la fila como timestamp pero desafortunadamente esto no funcionó. Todos los valores están establecidos en 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`) ) ; 

¿Cómo debería ser la statement para poder guardar los valores de la marca de tiempo con esta precisión?

Necesita estar en MySQL versión 5.6.4 o posterior para declarar columnas con tipos de datos de segundo fraccional. ¿No estás seguro de tener la versión correcta? Pruebe SELECT NOW(3) . Si obtiene un error, no tiene la versión correcta.

Por ejemplo, DATETIME(3) le dará una resolución de milisegundos en sus marcas de tiempo, y TIMESTAMP(6) le dará una resolución de microsegundos en una marca de tiempo * nix.

Lea esto: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html

NOW(3) le dará la hora actual del sistema operativo de su servidor MySQL con una precisión de milisegundos.

Si tiene un número de milisegundos desde la época de Unix , intente obtener un valor DATETIME (3)

 FROM_UNIXTIME(ms * 0.001) 

Las marcas de tiempo de Javascript , por ejemplo, se representan en milisegundos desde la época de Unix .

(Tenga en cuenta que la aritmética fraccional interna de MySQL, como * 0.001 , siempre se maneja como punto flotante de doble precisión IEEE754, por lo que es poco probable que pierda precisión antes de que el Sol se convierta en una estrella enana blanca).

Si está utilizando una versión anterior de MySQL y necesita una precisión de segundo en el tiempo, su mejor opción es actualizar. Cualquier otra cosa te obligará a hacer soluciones desordenadas.

Si, por alguna razón, no puede actualizar, podría considerar el uso de columnas BIGINT o DOUBLE para almacenar las marcas de tiempo de Javascript como si fueran números. FROM_UNIXTIME(col * 0.001) seguirá funcionando FROM_UNIXTIME(col * 0.001) . Si necesita la hora actual para almacenar en dicha columna, puede usar UNIX_TIMESTAMP() * 1000