26

我有一个这样的字符串:

2011-11-11 11:11:11.111111

我需要将它插入到 MySql 中的 datetime 列中。但是在我插入它之后,它变成了

2011-11-11 11:11:11

怎么了?

4

4 回答 4

58

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'));
于 2012-12-26T10:03:16.910 回答
8

在表中使用 datetime( 6 ) 或 timestamp( 6 ) 数据类型,并使用 NOW( 6 )插入当前时间以获得 6 位小数秒。

于 2015-05-03T20:38:00.193 回答
3

时间值中的小数秒中所述

对于文本值等上下文中的时间值,以及某些时间函数的参数或返回值中的时间值,尾随小数秒部分是允许的。例子:

mysql>选择微秒('2010-12-10 14:12:09.019473');
+--------------------------------------------+
| 微秒('2010-12-10 14:12:09.019473') |
+--------------------------------------------+
| 19473 |
+--------------------------------------------+

但是,当 MySQL 将值存储到任何时间数据类型的列中时,它会丢弃任何小数部分并且不存储它。

请注意,此行为在 v5.6.4 中已更改。

于 2012-12-26T09:54:55.050 回答
3

将日期时间值插入 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'
于 2014-07-25T18:29:06.913 回答