Gorm Struct 和 MySQL 的类型映射对照表

9 min read

以下是 Gorm Struct 和 MySQL 的类型映射对照表:

Gorm Struct 类型 MySQL 数据库类型
string varchar
bool boolean
int, int8, int16, int32 int, tinyint, smallint, mediumint, int
uint, uint8, uint16, uint32 int unsigned, tinyint unsigned, smallint unsigned, mediumint unsigned, int unsigned
float32, float64 float, double, decimal
time.Time datetime, date, timestamp
[]byte blob, binary
[]string varchar

如果需要自定义类型映射,可以使用 .SetVarColunm().SetTypeMap() 方法。例如:

// 设置某个字段类型为 JSON
model := DB.Model(&Product{})
model.SetVarColunm("detail", "json")
model.AutoMigrate(&Product{})

// 自定义类型映射
gorm.DefaultForeignKeyUpdateMethod = "CASCADE"
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
  NamingStrategy: schema.NamingStrategy{
    TablePrefix:   "tb_",
    SingularTable: true,
  },
  CreateBatchSize:          10,
  DisableForeignKeyConstraintWhenMigrating: true,
  ForeignKeyConstraintWhenMigrating:         true,
  PrepareStmt:              true,
  FullSaveAssociations:     true,
  Logger:                   logger.Default.LogMode(logger.Info),
  SkipDefaultTransaction:   false,
  QueryFields:              true,
  AllowGlobalUpdate:        false,
  DisableNestedTransaction: true,
  DisableAutomaticPing:     false,
  // 定义类型映射
  TypeMap: map[string]string {
      "bool":   "tinyint",
      "string": "varchar(255)",
  },
})