golang|golang time.Time 默认值写Mysql时报错
1.问题描述
model中一个表的字段为时间类型的字段time.Time.
在数据库设计中该字段可以为空。
可在实际写数据时,发生错误
INFO[0004]
[2018-02-11 10:04:39]Error 1292: Incorrect datetime value: '0000-00-00' for column 'published_at' at row 1
[2018-02-11 10:04:39][1.42ms]INSERT INTO `xxxx` (`author_id`,`status`,`title`,`summary`,`content`,`enable_risk_levels`,`image`,`published_at`,`created_at`,`updated_at`,`deleted_at`) VALUES ('1','1','拉丝机弗兰克','方法孟老师','','','','0001-01-01 00:00:00','2018-02-11 10:04:39','2018-02-11 10:04:39',NULL)
我们在表单中只提供了标题,摘要,内容,图片,级别的表单,其他都是默认值,create_at,update_at 为当前时间点。在golang 中,time.Time的默认时间值为'0001-01-01 00:00:00'
package mainimport (
"fmt"
"time"
)func main () {
t := new(time.Time)
fmt.Println(t)
}
【golang|golang time.Time 默认值写Mysql时报错】Output:
0001-01-01 00:00:00 +0000 UTC
2,解决方案 根据别人的提议是因为数据库的sql_mode的配置
执行
select @@sql_mode
Output:
文章图片
image.png
把模式中的NO_ZERO_IN_DATE, NO_ZERO_DATE除去即可。
mysql> set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
-> ;
Query OK, 0 rows affected, 1 warning (0.00 sec)
global 为全局设置,session为当前会话生效。
3.sql_mode介绍 别人的介绍链接
推荐阅读
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- 三门问题(蒙提霍尔悖论)分析与Golang模拟
- golang锁竞争性能
- 基于rabbitmq实现的延时队列(golang版)
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 【golang】leetcode初级-有效的括号&缺失数字
- 使用Go|使用Go Module构建项目
- golang声明一个map数组
- Golang使用快慢指针找不知长度链表的中间节点
- 【golang】leetcode初级-Fizz|【golang】leetcode初级-Fizz Buzz&计数质数