亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何告訴Gorm以節省錯過的時間。時間字段為 NULL 而不是 '0000-00-00'?

如何告訴Gorm以節省錯過的時間。時間字段為 NULL 而不是 '0000-00-00'?

Go
神不在的星期二 2022-08-01 19:00:34
我為用戶提供了以下自定義類型: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 值


查看完整回答
反對 回復 2022-08-01
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

像這樣使用


type Test struct {

    ID uint64 `gorm:"primary_key" json:"id"`

    CompletedAt sql.NullTime `gorm:"type:TIMESTAMP NULL"`

}

它有助于使“完成時間”字段的時間戳類型為空


查看完整回答
反對 回復 2022-08-01
  • 2 回答
  • 0 關注
  • 380 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號