如何在mysql中插入微秒精度的datetime?;
我有这样一个字符串:如何在mysql中插入微秒精度的datetime?;,mysql,Mysql,我有这样一个字符串: 2011-11-11 11:11:11.111111 我需要将它插入MySql中的datetime列中。但在我插入它之后,它就变成了 2011-11-11 11:11:11 出了什么问题?如下所述: 在文本值等上下文中,以及在某些时态函数的参数中或从某些时态函数返回值时,允许使用尾随小数秒部分作为时态值。例如: mysql> SELECT MICROSECOND('2010-12-10 14:12:09.019473'); +-------------------
2011-11-11 11:11:11.111111
我需要将它插入MySql中的datetime列中。但在我插入它之后,它就变成了
2011-11-11 11:11:11
出了什么问题?如下所述:
在文本值等上下文中,以及在某些时态函数的参数中或从某些时态函数返回值时,允许使用尾随小数秒部分作为时态值。例如:
mysql> SELECT MICROSECOND('2010-12-10 14:12:09.019473');
+-------------------------------------------+
| MICROSECOND('2010-12-10 14:12:09.019473') |
+-------------------------------------------+
| 19473 |
+-------------------------------------------+
mysql>选择微秒('2010-12-1014:12:09.019473')强>
+-------------------------------------------+
|微秒('2010-12-1014:12:09.019473')|
+-------------------------------------------+
| 19473 |
+-------------------------------------------+
然而,当MySQL将一个值存储到任何时态数据类型的列中时,它会丢弃任何小数部分而不存储它
请注意,5.6.4.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+,我建议您使用两列,一列用于datetime部分,另一列用于微秒部分:
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'));
将日期时间值插入MySQL的一些示例(5.6.17)
在表中使用日期时间(6)或时间戳(6)的数据类型,并将当前时间与NOW(6)一起插入,以获得6位小数秒。您如何知道它变成了
2011-11-11 11:11
?你在哪里看到的格式是这样的?还有,您要将此值存储到的列是什么数据类型?请检查此问题:非常感谢您更正我的问题和答案。我的英语太差了。明智的话:不要用ms表示微秒,因为ms是毫秒的官方符号。上面的SQL语句对我来说很有用,但我无法使用Workbench GUI创建表或更改带有小数秒列的表。您能找到这是5.6+
的参考吗?我在5.6发行说明中没有看到它。我认为5.5分数时间是一个很好的来源:“当MySQL将一个值存储到任何时态数据类型的列中时,它会丢弃任何分数部分而不存储它。”MySQL(5.6.17)不支持datetime()。您至少需要MySQL版本5.6.4。
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'