Golang Gorm Error 1292: Incorrect datetime value: '0000-00-00' for column

发布时间: 2021-06-04 10:04:05 作者: 大象笔记

报错内容

在用 Golang Gorm 更新 MySQL 一条数据时,报错:

Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1
UPDATE `repair` SET `created_at`='0000-00-00 00:00:00',`updated_at`='2021-06-03 17:03:31.359' WHERE `id` = 2

报错代码

我是将 Antd Pro Web 管理后台的数据通过 API 接口发送给后台 Golang 接口,进行更新。

由于前端不需要更新数据的创建时间,所以 Form 提交时,就没有提交 created_at 字段。 从而导致从请求解析数据到 struct 结构时,将 created_at 解析成了 0000 这种格式。

models.DB.Save(&repair)

Gorm Save 会保存所有的字段,即使字段是零值。

解决方法 Select 指定字段

合理的做法是,用 Select。设置需要更新的字段。

models.DB.Select("status", "notes", "updated_at").Updates(repair)

使用 Select 的好处:

(不推荐) Omit 并不合理

如果用 Omit 排除 created_at 字段:

models.DB.Omit("created_at").Updates(repair)

用 Omit 会有一个问题,就是零值不更新。

例如,我一个字段想从有内容,变成没有内容,那么这个更新操作就会失败。

其他可以更新 0 值的方法

我是一名山东烟台的开发者,联系作者