作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 postgres 中有一个表,其 UUID 字段类型必须是唯一的但可以为空
像这样的表格和模型
CREATE TABLE IF NOT EXISTS asdf(
id bigserial primary key,
name varchar(255) NOT NULL,
key uuid unique,
created_at timestamptz,
updated_at timestamptz
);
go 模型定义为
type Asdf struct {
ID uint64 `json:"id" gorm:"type:uuid;column:id"`
Name string `json:"name" gorm:"column:name"`
Key uuid.UUID `json:"key" gorm:"column:key"`
CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
}
result := db.Connect().Create(asdf.Asdf{ID:123,Name:"这是名字"})
并向终端打印以下sql查询
INSERT INTO "asdf" ("id","name","key","created_at","updated_at")
VALUES('123','This is the name','00000000-0000-0000-0000-000000000000','2022-04-27 03:41:49.338','2022-04-27 03:41:49.338')
它使用 00000000-0000-0000-0000-000000000000
作为 key
值而不是 NULL 将模型插入到数据库中
我还注意到这种情况发生在字符串类型中,它插入了一个空字符串 ''
而不是 NULL
我如何让 gorm 插入 NULL 而不是零/空字符串作为值?
最佳答案
尝试将您的字段类型更改为指针类型:
type Asdf struct {
ID uint64 `json:"id" gorm:"type:uuid;column:id"`
Name string `json:"name" gorm:"column:name"`
Key *uuid.UUID `json:"key" gorm:"column:key"`
CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
}
您显然也必须调整您的 go 代码(例如:检查 record.Key != nil
,访问 *record.Key
而不是 record .Key
等...)
我认为 gorm 也尊重常规的 sql 接口(interface),所以你也可以尝试定义一个实现的自定义类型:
sql.Scanner
将 null
转换为 ""
on sql -> go conversions,driver.Valuer
(来自 sql/driver
包)将 ""
转为 null
-> sql 转换。虽然我还没有测试过,所以你必须自己尝试。
关于postgresql - 如何将 NULL 值插入 UUID 而不是零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72023281/
我是一名优秀的程序员,十分优秀!