MySql-创建表报错[Err] 1067 - Invalid default value for 'runtime'

问题:
远程连接linux上的mysql后,创建表时报表:[Err] 1067 - Invalid default value for ‘runtime’
sql语句内容:

CREATE TABLE `t_report` (
  `runtime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  `sucess` int(11) DEFAULT NULL,
  `fail` int(11) DEFAULT NULL,
  `skip` int(11) DEFAULT NULL,
  PRIMARY KEY (`runtime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

出错原因:
liunx上的mysql版本为5.7引起的默认值不兼容的问题。上述使用了时间字段,类型是datetime。想到可能是类型的默认值被限制了,查看 sql_mode
在这里插入图片描述
出问题的值是:
NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
ONLY_FULL_GROUP_BY
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。

解决方案:直接修改my.cnf文件
vi /etc/my.cnf
在[mysqld]下面添加如下列:

作者:一颗小梪梪
链接:https://www.jianshu.com/p/44b97b11723b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在这里插入图片描述
重启mysql:执行命令service mysqld restart

如果sql_mode设置了ONLY_FULL_GROUP_BY,那么每一个sql语句中都要加上 group by 字段,否则就是不合法。
解决该问题,可直接去掉ONLY_FULL_GROUP_BY即可。

作者:一颗小梪梪
链接:https://www.jianshu.com/p/44b97b11723b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
转载:https://www.jianshu.com/p/44b97b11723b

发布了91 篇原创文章 · 获赞 5 · 访问量 5434

猜你喜欢

转载自blog.csdn.net/weixin_43947156/article/details/104430574