以下是 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)",
},
})