但在 gorm v2 版本中,如果没有特意指定,则 int 和 int64 都会默认映射为 bigint(20) 类型。
1 2 3 4
type Student struct{ Id int64 `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` Status int `json:"status" gorm:"column:status;not null;default:0"` }
在 gorm v2 中,如果想要映射成 int(11) 类型,则需要指定使用的 type :
1 2 3 4
type Student struct{ Id int64 `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` Status int `json:"status" gorm:"column:status;type:int(11);not null;default:0"` }
Id int64 `json:"id" gorm:"column:id;primaryKey;AUTO_INCREMENT"`
为了探究到底是哪里的问题,我做了如下的测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
type API struct { Id int64 `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` // 主键自增 成功 Id int64 `json:"id" gorm:"column:id;primaryKey;AUTO_INCREMENT"` // 主键自增 成功 Id int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键自增 成功 Id int64 `json:"id" gorm:"column:id;primary_key;autoIncrement"` // 主键自增 成功
Id int64 `json:"id" gorm:"column:id;type:bigint(20);primaryKey;auto_increment"` // 主键不自增 失败 Id int64 `json:"id" gorm:"column:id;type:bigint(20);primaryKey;autoIncrement"` // 主键不自增 失败 Id int64 `json:"id" gorm:"column:id;type:bigint(20);primaryKey;AUTO_INCREMENT"` // 主键不自增 失败
Id int64 `json:"id" gorm:"column:id;type:bigint(20) auto_increment;primary_key"` // 主键自增 成功 Id int64 `json:"id" gorm:"column:id;type:bigint(20) autoIncrement;primaryKey"` // Error 1064: You have an error in your SQL syntax; Id int64 `json:"id" gorm:"column:id;type:bigint(20) AUTO_INCREMENT;primaryKey"` // 主键自增 成功
Id int64 `json:"id" gorm:"column:id;primaryKey;type:bigint(20) autoIncrement;"` // Error 1064: You have an error in your SQL syntax; Id int64 `json:"id" gorm:"column:id;primaryKey;type:bigint(20) auto_increment;"` // 主键自增 成功 Id int64 `json:"id" gorm:"column:id;type:bigint(20) auto_increment;primaryKey"` // 主键自增 成功 }
个中滋味,大家还是自己体会吧!!!
至于怎么用,那就总结一下:
如果你不需要指定类型,则:
1
Id int64 `json:"id" gorm:"column:id;primaryKey;AUTO_INCREMENT"`
如果你想要指定类型,则:
1
Id int64 `json:"id" gorm:"column:id;type:bigint(20) auto_increment;primaryKey"`