avatar

目录
MySQL的sql_mode模式说明及设置

知道gorm 的 model增加DeletedAt字段就可以支持软删除后,本菜鸡大笔一挥,model 中增加了一行

go
1
DeletedAt time.Time `gorm:"deleted_at"`

完美!本地一跑…

plaintext
1
Incorrect datetime value: '0000-00-00' for column 'deleted_at' at row 1

喵了个咪,然后去查了一下,sql_model,其中有一个是NO_ZERO_IN_DATE,该模式下,不允许日期和月份为零,所以会报上面的问题。

简单~ 找到问题解决它,先去查一下当前mysql的 sql_mode, 命令如下:

sql
1
SELECT @@SESSION.sql_mode;

然后执行

sql
1
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES";

即可设置为严格模式。

这里有一段小插曲:我设置完后,运行代码,还是报上面的错误,发现是默认 deleted_at 为 null,但是实际插入的是0000-00-00, 最终定位是 DeletedAt 的类型,应该为*time.Time, 指针类型,此时为空时,才会插入 null,而非 0000-00-00

下面简单整理一下常见的sql_model

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2020/08/02/mysql-sql-mode/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论