防止数据库中的空值(或空字符串值)

huangapple go评论83阅读模式
英文:

Preventing null (or empty string values in the db)

问题

我正在使用PostgreSQL和GORM在我的Go应用程序中。

我以为在struct的sql标签中使用sql:"not null"可以防止空值的输入,但是当Go初始化带有string类型的struct时,默认值是空字符串,而不是数据库中的null。

我想知道是否有一种方法可以在struct定义中防止这种情况发生,这样我就不必在应用程序代码的所有层级上严格执行它。

英文:

I'm using PostgreSQL and GORM in my Go app.

I thought that using the sql tab of sql:"not null" would do the trick of preventing a null entry, but when go initializes structs with a string type then it defaults to an empty string which is not the same as null in the db.

I am wondering if there is a way to prevent this from happening in a struct definition so I wouldn't have to strictly enforce it at all levels in the application code.

答案1

得分: 23

你可以通过同时使用default: nullnot null约束来解决防止将空字符串插入数据库的问题。因此,如果结构字段的值为空,它将被视为默认值null,并且gorm将抛出错误。

示例代码如下:

type User struct {
    gorm.Model
    Email string `gorm:"unique;not null;type:varchar(100);default:null"`
}

因此,对于空的User.Email,gorm将抛出错误。

英文:

You can solve this problem of preventing '' (empty) string insertion into the database by using default: null and not null constraint together. SO if Struct field values are empty it will be consider as default value null and gorm will throw an error.

> gorm:"unique;not null;type:varchar(100);default:null"

Example is:

type User struct {
	gorm.Model
	Email  string    `gorm:"unique;not null;type:varchar(100);default:null"`

}

SO gorm for empty User.Email will throw an error.

答案2

得分: 0

当我使用这样的代码时,它可以正常工作,但是当我执行自动迁移时,gorm 报错了。

英文:
type User struct {
	gorm.Model
	Email  string    `gorm:"unique;not null;type:varchar(100);default:null"`

}

When I use like this it works but when I automigrate I did had error from migration gorm

答案3

得分: 0

为你的模型添加一个isValid()函数,如果默认值中存在非空字段(int为0,string为""等),则返回false。在插入之前,检查是否有效,如果无效则返回错误,否则返回nil。

英文:

Add a isValid() function to your model that returns false if a not null field is in its defalt (0 for int, "" for string, etc), and before insert, check if valid, return an error if not valid, else, nil.

huangapple
  • 本文由 发表于 2017年4月24日 20:04:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/43587610.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定