Tag: gorm

1 Posts

thumbnail
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)记录就没问题了。