我为用户提供了以下自定义类型:type User struct { UserID uint64 `gorm:"primaryKey"` CreatedAt time.Time UpdatedAt time.Time LastLogin time.Time}当传递给 gorm 的方法时,用户初始化如下:db.Create()return User{ UserID: userID, AccountID: accountID, UserType: userType, Status: status, UserInfo: &userInfo, CreatedAt: now, UpdatedAt: now,}因为是MySQL中的可空列,所以我没有在这里初始化它的值。LastLogintimestamp现在 gorm 将在 SQL 语句中解析未设置的值,并导致以下错误。'0000-00-00 00:00:00.000000'Error 2021-01-29 15:36:13,388 v1(7) error_logger.go:14 192.168.10.100 - - default - 0 Error 1292: Incorrect datetime value: '0000-00-00' for column 'last_login' at row 1虽然我理解MySQL如何在不更改某些模式的情况下不允许零时间戳值,但我可以轻松初始化时间。时间字段是一些遥远的日期,例如 2038-ish。我如何告诉 gorm 在 SQML 中将零时间字段作为 NULL 传递?
2 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
所以你在这里有几个选择。你可以做一个指针,这意味着它可以是一个值:LastLoginnil
type User struct {
ID uint64 `gorm:"primaryKey"`
CreatedAt time.Time
LastLogin *time.Time
}
或者像@aureliar提到的那样,你可以使用sql。空时间类型
type User struct {
ID uint64 `gorm:"primaryKey"`
CreatedAt time.Time
LastLogin sql.NullTime
}
现在,当您在数据库中创建该对象并且未设置 LastLogin 时,它将在数据库中另存为 NULL。
https://gorm.io/docs/models.html
值得注意的是,如果你使用sql。NullTime,在结构中,您将看到默认时间戳而不是 nil 值
哆啦的时光机
TA贡献1779条经验 获得超6个赞
像这样使用
type Test struct {
ID uint64 `gorm:"primary_key" json:"id"`
CompletedAt sql.NullTime `gorm:"type:TIMESTAMP NULL"`
}
它有助于使“完成时间”字段的时间戳类型为空
- 2 回答
- 0 关注
- 305 浏览
添加回答
举报
0/150
提交
取消