gpt4 book ai didi

mysql - 使用 gorm 向 MySQL 插入既是 PrimaryKey 又是 DEFAULT 的字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:46 27 4
gpt4 key购买 nike

我想要一个表,其主键是一个自动生成的时间戳(我知道这通常不是最好的主意,但在我的情况下没问题)并且它有另一个字符串字段。这是我使用的数据结构:

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') 有问题,这是在我没有准确指定时创建的。

有解决办法吗?

最佳答案

评论互动后,草拟本答案。

I'm guessing that it has a problem with the default time ('0001-01-01 00:00:00 +0000 UTC') which is created when I don't specify it exactly.

原因是,在 Go 中数据类型有零值,spec好读here .

对你来说,可能的方法是使用合适的gorm callbacks在数据库交互之前或之后设置或修改结构字段。

关于mysql - 使用 gorm 向 MySQL 插入既是 PrimaryKey 又是 DEFAULT 的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45035290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com