如何在mysql中插入一个微秒级的精度日期时间?

pia*_*art 18 mysql

我有一个像这样的字符串:

2011-11-11 11:11:11.111111
Run Code Online (Sandbox Code Playgroud)

我需要将它插入MySql,进入datetime列.但是在插入之后,它就变成了

2011-11-11 11:11:11
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

fth*_*lla 40

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
Run Code Online (Sandbox Code Playgroud)

如果您不使用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'));
Run Code Online (Sandbox Code Playgroud)

  • 明智的话:不要用ms来表示微秒,因为ms是毫秒的官方标志. (2认同)

IgK*_*IgK 6

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