我有一个这样的字符串:
2011-11-11 11:11:11.111111
我需要将它插入MySql,进入datetime列。但是在插入之后,它变成了
2011-11-11 11:11:11
出了什么问题?
答案 0 :(得分:39)
MySql 5.6+在时间值中支持fractional seconds,而以前的版本则不支持。{/ p>
标准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'));
答案 1 :(得分:4)
在表格中使用日期时间( 6 )或时间戳( 6 )的数据类型,并将当前时间与NOW( 6 )一起插入得到6位小数秒。
答案 2 :(得分:3)
正如Fractional Seconds in Time Values所述:
对于诸如文字值之类的上下文中的时间值以及来自某些时间函数的参数或返回值,允许尾随小数秒部分。例如:
mysql> SELECT MICROSECOND('2010-12-10 14:12:09.019473'); +-------------------------------------------+ | MICROSECOND('2010-12-10 14:12:09.019473') | +-------------------------------------------+ | 19473 | +-------------------------------------------+但是,当MySQL将值存储到任何时态数据类型的列中时,它会丢弃任何小数部分而不会存储它。
请注意v5.6.4中的此行为has changed。
答案 3 :(得分:2)
将日期时间值插入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'