You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何不同带小数秒的DATETIME值插入时触发主键重复错误?

问题原因与解决方法

核心原因

你遇到的问题是因为创建表时datetime列未指定小数秒精度,MySQL默认会将datetime的小数精度设为0,这意味着所有带小数秒的时间值都会被自动截断掉小数部分。

所以2022-01-01 00:00:00.000000和2022-01-01 00:00:00.120000插入后都会被处理成2022-01-01 00:00:00,主键自然就重复了。

虽然官方文档提到DATETIME支持最多6位小数秒,但这个特性需要你在定义列时显式指定精度才会生效,否则默认不保留任何小数部分。

解决方法

修改表结构,给trade_date列加上小数秒精度(比如保留6位):

ALTER TABLE dt_test MODIFY COLUMN trade_date datetime(6) NOT NULL;

修改后再执行插入操作,两个带不同小数秒的时间值就能正常插入,且会完整存储小数部分:

mysql> insert into dt_test select '2022-01-01 00:00:00.000000';
Query OK, 1 row affected (0.01 sec)

mysql> insert into dt_test select '2022-01-01 00:00:00.120000';
Query OK, 1 row affected (0.01 sec)

查询时也能看到完整的时间值:

mysql> select * from dt_test;
+----------------------------+
| trade_date                 |
+----------------------------+
| 2022-01-01 00:00:00.000000 |
| 2022-01-01 00:00:00.120000 |
+----------------------------+

内容的提问来源于stack exchange,提问作者zhuguowei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:34