我為用戶提供了以下自定義類型: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 關注
- 380 瀏覽
添加回答
舉報
0/150
提交
取消