post icon

Utilizar precisión de milisegundos en MySQL

Almacenar en campos de tipo DateTime, Time o Timestamp con una precisión fina en MySQL es un tanto difícil, ya que lamentablemente hasta la fecha aún no hay soporte para tal efecto. Se pueden formatear el tiempo pero si la fuente del tiempo es uno de estos campos en MySQL veríamos los milisegundos con valores cero.

En la lista de petición de desarrollo de MySQL hace más de 5 años que vienen pidiendo esto, y no hacen caso (el motivo lo desconozco) como pueden ver aqui (inglés requerido). Esto provocó distintas reacciones, algunos migraron a PostgreSQL, MS SQL, entre otros. Una implementación interesante es el uso de UDF, aunque un tanto complejo para mi gusto.

Una solución más elegante es utilizar un campo de tipo Decimal(17,3) para su almacenamiento. Y luego para consultarlo pasar por la función timestamp().

Veamos un ejemplo práctico de esto:

1
2
3
4
5
6
7
CREATE TABLE devtroce(
  milisegundo DECIMAL (17, 3) DEFAULT NULL
)
ENGINE = MYISAM
AVG_ROW_LENGTH = 25
CHARACTER SET latin1
COLLATE latin1_swedish_ci;

Con eso creariamos la tabla con el campo necesario, ahora insertemos un valor para probarlo

1
INSERT INTO devtroce VALUES('20100412170212.453');

De este modo ya tenemos una precisión de milisegundos (aunque de momento no podemos tener mayor precisión que ésta). Ahora veamos en acción realmente esto:

1
SELECT TIMESTAMP(milisegundo), YEAR(milisegundo), DAY(milisegundo), milisegundo AS 'decimal' FROM devtroce;

Se pueden efectuar otras operaciones de fechas y horas sobre este tipo de campo, incluso restas, sumas o comparaciones.

Comentarios desde Facebook:

Trackbacks/Pingbacks

  1. Tweets that mention Utilizar precisión de milisegundos y microsegundos en MySQL | DevTroce.com -- Topsy.com UNITED STATES - 13 Abril 2010

    […] This post was mentioned on Twitter by Diogenes Caraballo. Diogenes Caraballo said: Utilizar precisión de milisegundos en #MySQL #Datetime http://bit.ly/cv8gCs […]

Responder