首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何告诉gorm将缺少的time.Time字段保存为NULL,而不是'0000-00-00'?

如何告诉gorm将缺少的time.Time字段保存为NULL,而不是'0000-00-00'?
EN

Stack Overflow用户
提问于 2021-01-29 16:40:18
回答 2查看 1.8K关注 0票数 2

我为用户提供了以下自定义类型:

代码语言:javascript
运行
复制
type User struct {
    UserID    uint64 `gorm:"primaryKey"`
    CreatedAt time.Time
    UpdatedAt time.Time
    LastLogin time.Time
}

当传递给gorm的db.Create()方法时,用户初始化如下:

代码语言:javascript
运行
复制
return User{
    UserID:    userID,
    AccountID: accountID,
    UserType:  userType,
    Status:    status,
    UserInfo:  &userInfo,
    CreatedAt: now,
    UpdatedAt: now,
}

因为LastLogin在MySQL中是一个可以为空的timestamp列,所以我没有在这里初始化它的值。

现在gorm将在SQL语句中将未设置的值解析为'0000-00-00 00:00:00.000000',并导致以下错误。

代码语言:javascript
运行
复制
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在不更改某些模式的情况下不允许时间戳值为零的原因,但我可以很容易地将time.Time字段初始化为一些较远的日期,例如2038年左右。如何告诉gorm将零时间字段作为NULL传递到SQML中?

EN

Stack Overflow用户

发布于 2021-02-03 02:59:33

像这样使用

代码语言:javascript
运行
复制
type Test struct {
    ID uint64 `gorm:"primary_key" json:"id"`
    CompletedAt sql.NullTime `gorm:"type:TIMESTAMP NULL"`
}

这有助于将CompletedAt字段设置为可空的时间戳类型

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65951219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档