You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:01:47