gorm 的gorm.Model在Create数据时不是会自动插入时间吗?怎么一直报错

lujiahaoo · 2019-10-22 00:33:34 · 4646 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-10-22 00:33:34 的主题,其中的信息可能已经有所发展或是发生改变。

Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4646 次点击  
加入收藏 微博
9 回复  |  直到 2020-08-10 18:18:27
18393910396
18393910396 · #1 · 5年之前

你的struct 发一下,看一下结构体定义

lujiahaoo
lujiahaoo · #2 · 5年之前
type User struct {
    gorm.Model
    Username string `gorm:"type:varchar(20);unique_index"`
    Password string `gorm:"type:varchar(64)"`
    Phone    string `gorm:"type:char(11);unique_index"`
}
lujiahaoo
lujiahaoo · #3 · 5年之前

@18393910396 go type User struct { gorm.Model Username string `gorm:"type:varchar(20);unique_index"` Password string `gorm:"type:varchar(64)"` Phone string `gorm:"type:char(11);unique_index"` }

lujiahaoo
lujiahaoo · #4 · 5年之前

@18393910396 我先是将request body Decode到结构体 RegisterBody

type RegisterBody struct {
    UserName string `name:"username" valid:"stringlength(15|20),required"`
    Password string `name:"password" valid:"stringlength(15|20),required"`
    Phone    string `name:"phone" valid:"numeric,length(11|11),required"`
}

然后用govalidator验证结构体正确之后就 插入数据库,但是gorm好像没有自动生成当前时间,然后一直报错

Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1
18393910396
18393910396 · #5 · 5年之前

http://gorm.io/zh_CN/docs/conventions.html 看一下对应的结构字段和tag对不对

lujiahaoo
lujiahaoo · #6 · 5年之前

@18393910396 结构字段和tag都没错,直接是在结构体里引用了gorm.Model,如果我其他的字段个tag有误应该会报错的,刚刚试了下在db.Create前打印了结构体的CreatedAt字段,显示的是0001-01-01 00:00:00 +0000 UTC,不是说gorm会自动插入当前的时间吗。。。

lujiahaoo
lujiahaoo · #7 · 5年之前

在mysql里改了一下配置(把NO_ZERO_DATE去掉了)

SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

就可以插入了,但是在插入前打印结构体user.CreatedAt显示的是0001-01-01 00:00:00 +0000 UTC,插入后去表里看到的时间却是正确的时间,例如2019-10-22 13:38:28,真的服了,不知道咋回事

fanpei0121
fanpei0121 · #8 · 5年之前

应该是你得mysql版本是新版本的,mysql以前 datetime 的默认值可以设为 '0000-00-00 00:00:00', 新的mysql不能设为这个值,可以把默认值设置为正常的时间就可以了, 比如 '2019-01-01 00:00:00'

DogBaoBao
DogBaoBao · #9 · 5年之前

一样的问题

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传