MySQL5.7.24 创建新表时提示时间戳非法1067-Invalid default value for 'EndTime'

在MySQL5.7.24中创建新表时遇到时间戳非法错误1067,详细分析了问题原因,涉及STRICT_TRANS_TABLES、NO_ZERO_IN_DATE和NO_ZERO_DATE等sql_mode配置项,并提供了具体的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL5.7.24 创建新表时提示时间戳非法1067-Invalid default value for 'EndTime'

1.问题现象

我的MySQL版本是5.7.24,执行sql语句时报错:
在这里插入图片描述
查看了一下执行的sql建表语句,其中时间endtime部分如下图:
在这里插入图片描述

2.分析原因

执行SQL语句:

SELECT @@sql_mode;

搜索出来我的mysql的sql_mode如下图:
在这里插入图片描述
发现搜索的sql_model中含有STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝), NO_ZERO_IN_DATE,NO_ZERO_DATE。所以在严格模式下,不允许日期和月份为零

NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:认为日期 ‘0000-00-00’ 非法,与是否设置后面的严格模式有关。

  1. 如果设置了严格模式,则 NO_ZERO_DATE 自然满足。但如果是 INSERT IGNORE 或 UPDATE IGNORE,’0000-00-00’依然允许且只显示warning。
  2. 如果在非严格模式下,设置了NO_ZERO_DATE,效果与上面一样,’0000-00-00’允许但显示warning;如果没有设置NO_ZERO_DATE,no warning,当做完全合法的值。
  3. NO_ZERO_IN_DATE情况与上面类似,不同的是控制日期和天,是否可为 0 ,即 2010-01-00 是否合法。

3.解决方法

1.执行sql语句:

SET @@global.sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

2.因为设置global,所以需要重启MySQL才会生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值