我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql建表报错:invalid default value for 'date'的解决方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql建表报错:invalid default value for 'date'的解决方法

问题描述

在执行sql建表脚本时,出现了“invalid default value for ‘end_date’ ”错误,导致脚本执行失败。

执行的sql语句

CREATE TABLE `tb_task_site` (
  `id` varchar(40) NOT NULL COMMENT 'id',
  `start_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '同步开始时间',
  `end_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '同步结束时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

错误提示

原因解析

mysql5.7对sql_mode的设置比mysql5.6更严格了,mysql5.6默认的sql_mode:

NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

mysql5.7默认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

其中 NO_ZERO_IN_DATE,NO_ZERO_DATE 两个参数使得时间或日期参数 不得 使用0作默认值,也就是上面的sql中 “default ‘0000-00-00 00:00:00’ ”是不被允许的,所以导致该错误提示。

可以通过 select @@sql_mode; 查看自己的mysql设置的sql_mode的值。

sql_mode 使得 sql 语句更严谨,但是又会带来老版本的不兼容问题,所以可以设置sql_mode的值使得新版本兼容老版本的sql脚本。

解决方案

既然是那两个sql_mode参数导致的问题,那就将两个参数去掉就好了。在默认的sql_mode参数去除,只剩下:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

上面参数只是例子,具体设置参数值按照项目要求。

解决方法有如下几种:

1、暂时解决方案,可以在该会话(session)中暂时修改其sql_mode参数,但是会话结束,下一次会话,修改的参数就失效,变为原来的参数。

set SQL_MODE = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

执行完之后就可以继续执行建表语句,但是重启mysql后再执行建表语句的话依旧会报错。

2、永久解决方案,可以通过执行sql方式,设置全局sql_mode参数,设置后效果永久生效。

set GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

3、永久解决方案,直接修改配置文件,windows系统的话是my.ini文件,linux的话是my.cnf文件。有sql_mode的设置就修改,没有就添加sql_mode:

然后重启mysql,例如linux下执行mysql重启命令:

systemctl restart mysqld

总结 

到此这篇关于mysql建表报错:invalid default value for 'date'解决的文章就介绍到这了,更多相关mysql invalid default value for 'date'内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql建表报错:invalid default value for 'date'的解决方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql建表报错:invalid default value for 'date'的解决方法

目录问题描述原因解析解决方案总结 问题描述在执行sql建表脚本时,出现了“invalid default value for ‘end_date’ ”错误,导致脚本执行失败。执行的sql语
2022-12-15

mysql建表报错:invalid default value for 'date'的解决方法

最近遇到一个这样的问题,出现了invaliddefaultvaluefor'end_date'错误,所以下面这篇文章主要给大家介绍了关于mysql建表报错:invalid default value for 'date'的解决方法,需要的朋友可以参考下
2022-12-15

Mysql报错Duplicate entry '值' for key '字段名'的解决方法

遇到这种问题, 是你的数据库表那个字段设置了唯一索引。所以这个字段新增的数据不能重复。具体可以打开表,然后点击表设置,具体教程可以看下文章最后Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLI
2023-04-14

Mysql报错Duplicate entry '值' for key '字段名'的解决方法

今天在使用数据库的过程中,发现一直报Duplicate entry '值' for key '字段名'的错误,所以下面这篇文章主要给大家介绍了关于Mysql报错Duplicate entry '值' for key '字段名'的解决方法,需要的朋友可以参考下
2023-05-16

解决Mysql报Invalid default value for ''operate_time''错误的问题

在数据库中执行建表语句CREATE TABLE `sys_acl` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限id',`code` varchar(20) NOT NULL DEFAU
2022-05-18

编程热搜

目录