mysql: Incorrect datetime value: ‘0000-00-00’
发现问题
在 gorm 中使用 MySQL 插入多行数据时,日期存在空值会出现这个问题 Incorrect datetime value: '0000-00-00'
![](https://rmb.ee/wp-content/uploads/2022/10/974b8ef2-b38f-be3f-ffcf-73f6cfe725aa.png)
问题原因
查看默认 sql_mode
select @@sql_mode;
发现默认 sql_mode 中不允许 0 值的日期
![](https://rmb.ee/wp-content/uploads/2022/10/4e0938f2-60b2-9fb0-d484-0e12feb42903.png)
解决方法
以 macOS 为例:
在 /usr/local/mysql
(默认安装目录) 中创建 my.cnf
![](https://rmb.ee/wp-content/uploads/2022/10/9c73e8fe-79e6-1035-b6d5-c546079d3d9e.png)
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
![](https://rmb.ee/wp-content/uploads/2022/10/8a3e8e60-dd01-0ffa-06e8-cb15d36e27d8.png)
保存后,打开 系统偏好设置 -> MySQL -> Configuration
,配置 .cnf 路径
![](https://rmb.ee/wp-content/uploads/2022/10/88a0a1ef-c0c5-10fc-6a8f-9eb396d0f9bd.png)
然后重启 MySQL 服务
![](https://rmb.ee/wp-content/uploads/2022/10/3ac3694b-bc0e-bd3c-4ee3-b1f0a58c4239.png)
再次查看 sql_mode,发现值已经更新。并且 0 值日期可以成功插入。
![](https://rmb.ee/wp-content/uploads/2022/10/6e560314-2d1e-9f64-e4ed-19ec99b4bbcc.png)