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.