versiones tutorial español descargar definicion caracteristicas mysql

tutorial - mysql versiones



Cómo insertar un datetime de precisión de microsegundos en mysql? (4)

Tengo una cuerda como esta:

2011-11-11 11:11:11.111111

y necesito insertarlo en MySql, en una columna de fecha y hora. Pero después de insertarlo, se convierte en

2011-11-11 11:11:11

¿Qué está mal?


Algunos ejemplos de inserción de valores de fecha y hora en MySQL (5.6.17)

create database if not exists mydb; use mydb; drop table if exists sample; create table sample (c1 integer, c2 datetime(6),c3 varchar(30)); insert into sample values (1, ''2014-07-25 11:18:10.999999'', ''Actual Given Value''); insert into sample values (2, now(6), ''From NOW(6) function''); insert into sample values (3, now(), ''From NOW() function''); insert into sample values (4, sysdate(6), ''From sysdate(6) function''); insert into sample values (5, sysdate(), ''From sysdate() function''); select * from sample; # c1, c2, c3 ''1'', ''2014-07-25 11:18:10.999999'', ''Actual Given Value'' ''2'', ''2014-07-25 11:27:27.314114'', ''From NOW(6) function'' ''3'', ''2014-07-25 11:27:27.000000'', ''From NOW() function'' ''4'', ''2014-07-25 11:27:27.429121'', ''From sysdate(6) function'' ''5'', ''2014-07-25 11:27:27.000000'', ''From sysdate() function''


Como se documenta en los segundos fraccionarios en los valores de tiempo :

Una parte de segundo fraccional de segundo es permisible para valores temporales en contextos tales como valores literales, y en los argumentos o valores de retorno de algunas funciones temporales. Ejemplo:

mysql> SELECT MICROSECOND(''2010-12-10 14:12:09.019473''); +-------------------------------------------+ | MICROSECOND(''2010-12-10 14:12:09.019473'') | +-------------------------------------------+ | 19473 | +-------------------------------------------+

Sin embargo, cuando MySQL almacena un valor en una columna de cualquier tipo de datos temporales, descarta cualquier parte fraccionaria y no la almacena.

Tenga en cuenta que este comportamiento ha cambiado en v5.6.4.


MySql 5.6+ admite segundos fraccionarios en Valores de tiempo, mientras que las versiones anteriores no lo hacen.

Una columna de datetime y datetime estándar no contendrá valores de microsegundos, mientras que una columna de datetime y datetime(6) hará. Puedes probarlo en MySql 5.6:

CREATE TABLE your_table ( d1 datetime, d2 datetime(6) ); INSERT INTO your_table VALUES (''2011-11-11 11:11:11.111111'', ''2011-11-11 11:11:11.111111''); SELECT MICROSECOND(d1) as m1, MICROSECOND(d2) as m2 FROM your_table; m1 | m2 ----------- 0 | 111111

Si no está utilizando MySql 5.6+, le sugeriría que use dos columnas, una para la parte de fecha y hora y otra para los microsegundos:

CREATE TABLE your_table ( dt datetime, us int ); INSERT INTO your_table VALUES (''2011-11-11 11:11:11.111111'', MICROSECOND(''2011-11-11 11:11:11.111111''));


use el tipo de datos datetime ( 6 ) o la marca de tiempo ( 6 ) en su tabla e inserte la hora actual con NOW ( 6 ) para obtener 6 dígitos de segundos fraccionarios.