问题:

MySQL5.6 版本。datetime 字段类型支持6位毫秒级别。

当从5.5升级以后,插入的值可能会被四舍五入(太坑!!!)

 

# 实例1,  MySQL 5.6

CREATE TABLE szy (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gmt_create` datetime DEFAULT NULL,           #5.6 版本 定义格式为 date time(6) ,保留6位毫秒数值。不加表示不保留毫秒
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

> insert into szy select 1,'2018-08-28 23:59:59.999';

> select * from szy;
+----+---------------------+
| id | gmt_create |
+----+---------------------+
| 1 | 2018-08-29 00:00:00 |.       # 字段值变了!!!
+----+---------------------+
1 row in set (0.00 sec)

 

# 实例2,MySQL5.6

CREATE TABLE szy (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gmt_create` datetime(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

> insert into szy select 1,'2018-08-28 23:59:59.999';

> insert into szy select 2,'2018-08-28 23:59:59.999999';

> insert into szy select 3,'2018-08-28 23:59:59';

> select * from szy;


+----+-------------------------+
| id | gmt_create |
+----+-------------------------+
| 1 | 2018-08-28 23:59:59.999 |
| 2 | 2018-08-29 00:00:00.000 |      # 又变了!!!
| 3 | 2018-08-28 23:59:59.000 |
+----+-------------------------+
3 rows in set (0.00 sec)

 

> select * from szy where gmt_create='2018-08-28 23:59:59';    #查询还有精确度要求
+----+-------------------------+
| id | gmt_create |
+----+-------------------------+
| 3 | 2018-08-28 23:59:59.000 |
+----+-------------------------+

 

总结:

1、MySQL 5.6 版本 datetime 最多支持6位毫秒,设置几位,业务在写入时候,就要写几位。不能比设置的位数多,否则会出现四舍五入的情况。

2、查询有精确度限制。

相关文章:

  • 2021-08-14
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2021-12-15
  • 2021-10-07
  • 2022-12-23
  • 2022-12-23
  • 2022-01-05
  • 2021-09-12
相关资源
相似解决方案