我有一个这样的字符串:
2011-11-11 11:11:11.111111
我需要将它插入到 MySql 中的 datetime 列中。但是在我插入它之后,它变成了
2011-11-11 11:11:11
怎么了?
我有一个这样的字符串:
2011-11-11 11:11:11.111111
我需要将它插入到 MySql 中的 datetime 列中。但是在我插入它之后,它变成了
2011-11-11 11:11:11
怎么了?
MySql 5.6+ 支持时间值中的小数秒,而以前的版本不支持。
标准datetime
列将不保存微秒值,而datetime(6)
将。您可以在 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
如果您不使用 MySql 5.6+,我建议您使用两列,一列用于日期时间部分,一列用于微秒:
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'));
在表中使用 datetime( 6 ) 或 timestamp( 6 ) 数据类型,并使用 NOW( 6 )插入当前时间以获得 6 位小数秒。
对于文本值等上下文中的时间值,以及某些时间函数的参数或返回值中的时间值,尾随小数秒部分是允许的。例子:
mysql>选择微秒('2010-12-10 14:12:09.019473'); +--------------------------------------------+ | 微秒('2010-12-10 14:12:09.019473') | +--------------------------------------------+ | 19473 | +--------------------------------------------+但是,当 MySQL 将值存储到任何时间数据类型的列中时,它会丢弃任何小数部分并且不存储它。
请注意,此行为在 v5.6.4 中已更改。
将日期时间值插入 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'