昨天被这个报错整的死去活来,网上搜索问题结果大多有以下几种情况:
版本低于5.7。 但是我的MySQL版本是5.7。
2.找到MySQL下载路径中的文件,中对sql_mode进行修改
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
或者网络上出现的其他优秀答案。
我的修改后还是报错。而且我原有的sql_mode就没有限制时间默认值……
很好,于是乎我去求救大佬朋友们,大佬A用cmd直接写sql语句解决,证明我的MySQL是能创建默认值为CURRENT_TIMESTAMP的时间字段的,然后大佬B说他前几天也遇到过类似的问题,最后解决思路是用后端去处理这个创建当前时间。
既然cmd能写出来,那么Navicat一定也可以,一觉睡醒我又来钻牛角尖了,仔细回放了Navicat的学习视频,我华生发现了盲点:
第一步:新建连接、新建数据库。
第二步:新建表,新建主键字段,随便其他字段,还有主人公create_time字段(类型timestamp或datatime都行)。重点来了,不要修改它默认值,它默认值为空白或是null都不要理睬。然后点击保存。
第三步:右键,设计表,点击create_time字段,修改默认值为CURRENT_TIMESTAMP,根据当前时间戳更新不要点勾,点击保存。没!有!报!错!
第四步:欢呼。
遇到报错的很大原因,我猜测是在新建表时就修改了默认值为CURRENT_TIMESTAMP,然后Navicat建表语句不符合 默认值为CURRENT_TIMESTAMP 的规范,然后就会报1064的错误,定位到你create_time那行。
总之问题解决了,皆大欢喜。最后感谢大佬A和大佬B的帮助~
补充:sql语句(只是为了测试create_time字段)
CREATE TABLE `gy`.`Untitled` (
`id` int(20) NOT NULL COMMENT 'id',
`create_time` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);