美文网首页
datetime字段毫秒值四舍五入

datetime字段毫秒值四舍五入

作者: 青水山 | 来源:发表于2023-02-08 10:26 被阅读0次

问题:

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、查询有精确度限制。

相关文章

网友评论

      本文标题:datetime字段毫秒值四舍五入

      本文链接:https://www.haomeiwen.com/subject/kmixkdtx.html