我想要一個主鍵是自動生成的時間戳的表(我知道這通常不是最好的主意,但在我的情況下它是可以的),它有另一個字符串字段這是我使用的數據結構:將使用gorm的PrimaryKey和DEFAULT字段插入到MySQL
type GlobalDefault struct {
Timestamp time.Time `gorm:"primary_key" sql:"DEFAULT:current_timestamp"`
Version string `sql:"not null"`
}
當我使用這個數據結構AutoMigrate我確實得到了表中的時間戳作爲主鍵,我甚至可以運行insert into global_defaults (version) VALUES ('1.5.3');
和新行會得到插入一個自動生成的時間戳。
我的問題是我不能使用gorm將記錄插入到此表中。我用下面的功能:
func (repository *AgentRepository)SetGlobalDefault(version string) error {
gd := GlobalDefault{ Version:version }
return repository.connection.Create(&gd).Error
}
而當我把它稱爲我收到以下錯誤:
Received unexpected error could not convert argument of field Timestamp from int64 to time.Time
如果我明確地提供時間戳,它的工作原理。我猜測它的默認時間('0001-01-01 00:00:00 + 0000 UTC')是在我沒有完全指定時創建的。
有沒有辦法解決這個問題?
我的建議是不要在MySQL中使用Timestamp作爲主鍵。它不能保證是唯一的,它可能會在MySQL中爲你造成[麻煩](https://bugs.mysql.com/bug.php?id=8523);因爲時間戳僅以1秒的精度進行存儲。 使用BIGINT作爲主鍵並將索引添加到Timestamp列。 – jeevatkm
我知道了,我在我的問題中寫道。但我的重點是瞭解如何使用gorm。如果我知道如何使用SQL創建這樣的模式,我想了解如何使用gorm來完成。 – Dina