GORM中AutoMigration()是否会在数据库端添加NOT NULL属性?
GORM AutoMigration() 是否会为字段添加NOT NULL属性?
GORM的AutoMigration()方法是否给数据库字段添加NOT NULL约束,完全取决于结构体字段的定义和标签设置,具体规则如下:
非指针类型且无特殊标签:如果字段是
string、int这类非指针基础类型,且没有设置null标签,AutoMigration()会自动给对应数据库字段加上NOT NULL约束。因为GORM默认认为非指针类型的字段必须有有效值,不能为nil。
示例代码:type User struct { gorm.Model Name string // 数据库中name字段会被设为NOT NULL }指针类型:如果字段是
*string、*int这类指针类型,无论是否设置默认值,AutoMigration()都不会添加NOT NULL约束,因为指针可以为nil,对应数据库中的NULL值。
示例代码:type User struct { gorm.Model Name *string // 数据库中name字段允许为NULL }设置
gorm:"default:xxx"标签:- 非指针字段加默认值标签:会同时添加NOT NULL约束和默认值,确保字段总有有效值。
- 指针字段加默认值标签:数据库字段会有默认值,但仍然允许NULL(指针可设为nil)。
示例代码:
type User struct { gorm.Model Age int `gorm:"default:18"` // age字段NOT NULL,默认值18 City *string `gorm:"default:'Beijing'"` // city字段允许NULL,默认值Beijing }设置
gorm:"null"标签:即使是非指针类型,只要设置了null标签,AutoMigration()就会让对应数据库字段允许NULL,覆盖默认的NOT NULL行为。
示例代码:type User struct { gorm.Model Name string `gorm:"null"` // name字段允许为NULL }
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

