go gorm mysql报错:Error 1292: Incorrect datetime value: ‘XXX‘ for column ‘created_at‘ at row 1

问题记录

在用go语言写项目操作数据库时,由于我的User结构体中存在时间字段

type User struct {
	ID        uint      `gorm:"primary_key"`
	CreatedAt time.Time `gorm:"type:timestamp;not null"`
	UpdatedAt time.Time `gorm:"type:timestamp;not null"`
	UserName  string    `gorm:"type:varchar(20);not null" json:"username"`
	PassWord  string    `gorm:"type:varchar(20);not null" json:"password"`
	Role      int       `gorm:"type:int" json:"role"`
}

然后在更新数据库时报了错

	err := db.Create(&data).Error
Error 1292: Incorrect datetime value: '2022-07-20 15:52:42.7744207' for column 'created_at' at row 1

从报错上来看大概是值的类型与值不对应造成的不合法
于是我将值类型改为 datatime 和 timestamp
都不行,于是去查资料
解决方法
这个链接解决了我的问题,但该链接的主人解决的是时间不能为0,我一开始也有碰到,后面不懂解决遂放弃那个本来在我项目里的 del_at字段。

造成问题的主要原因是mysql的严格模式造成的。

解决方法

查看sql_mode

# 查看当前sql_mode
select @@sql_mode;
# 查看全局sql_mode
select @@global.sql_mode;
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> select @@global.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

修改sql_mode

暂时性修改

也不用像下面那样写,只要你把你的sql_mode中的 STRICT_TRANS_TABLES 字段去掉就ok了

# 修改全局
set @@global.sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
# 修改当前
set @@sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

永久性修改

上面的只是暂时性修改,当你的电脑重启后,MySQL服务也随之重启,这时MySQL服务端会去读取my.ini 配置文件,来覆盖你直接的设置,所以若想有永久修改,便需要直接去修改my.ini文件(MySQL的配置文件)

  1. 找到my.ini文件
    在这里插入图片描述

  2. 右键以记事本打开
    在这里插入图片描述

  3. 直接ctrl+f 搜索 STRICT_TRANS_TABLES,然后删除该字段便ok了

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值