欢迎访问
我们一直在努力

gorm enum字段问题

开发时碰到了mysql中字段类型为enum中,比如下面的gender字段

CREATE TABLE `user` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `account` varchar(255) NOT NULL COMMENT '登录账号',
  `gender` enum('no','male','female') NOT NULL DEFAULT 'no' COMMENT '性别',
  PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 COMMENT='用户表'

对应字段类型看似是string类型的,因此定义结构体定义为了

type User struct {
  Id  int
  Account string
  Gender string
}

但是在用gorm库create表记录是有如下错误:

newUser := &db.User{
  Account: "Test",
}
if err := sqlDB.Create(newUser).Error; err != nil {
    return err
}

// err为 Error 1265: Data Truncated

猜想到的问题原因是
Data Truncated通常是因为字段类型不匹配导致的,这里因为设定gender为空,和mysql定义的默认值为no产生了冲突,gorm默认按照string的默认值去insert记录也就出问题了,这里其实需要告诉gorm该字段类型的定义的,因此添加上mysql的标记,让gorm默认值和mysql定义的一致

type User struct {
  Id  int
  Account string
  Gender string `gorm:"type:enum('no','male','female');default:no"`
}

之后在插入(create)记录就没问题了。

未经允许不得转载:威威牛 » gorm enum字段问题
分享到: 更多 (0)