MySQL数据库SQLSTATE[22007]: Invalid datetime format 日期类型不能为空值的解决办法

如果你的数据库是mysql,

如果你创建表或插入数据时遇到的BUG--它长这样: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'xxx' at row 11067 - Invalid default value for 'xx'

那么我将赐予你 两套剑法:

(一)追魂夺命剑:修改sql_mode参数值

七十二路"追魂夺命剑",此剑法快似闪电、迅捷无比,更兼招数精奇;"着"的一声刺中小怪sql_mode,小怪即便使出生平绝技"STRICT_TRANS_TABLES",也会被剑击中咽喉,大叫一声摔倒见阎王,招数之快令人难以想象。

sql 复制代码
SELECT @@sql_mode;
#ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

set sql_mode ='ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

重启mysql服务后小怪诈尸了,又使出"STRICT_TRANS_TABLES",需要到改配置文件一劳永逸

mysql 复制代码
# 改变/etc/my.cnf(windows修改my.ini),重启mysql服务
[mysqld]
sql_mode = ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

(二)玄铁重剑:使用NULL替代0000-00-00 00:00:00/0000-00-00

用了重剑后,越是平平无奇的剑招,越是威力极大。但它还是有招式,还差那么一丁点到无招的境界,而且剑法也必须配合重剑使用才行。

sql 复制代码
ALTER TABLE active_log MODIFY COLUMN start_date datetime NULL;

建表SQL

sql 复制代码
DROP TABLE IF EXISTS `active_log`;

CREATE TABLE `active_log` (
  `id` bigint(11) unsigned NOT NULL auto_increment,
  `start_date` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT '活动开始时间',
   created_date DATE DEFAULT '0000-00-00',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
相关推荐
数据龙傲天4 分钟前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
engineer-gxd39 分钟前
MySQL 表的操作
mysql
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油1 小时前
01_SQLite
数据库·sqlite
liuxin334455661 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。2 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec2 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa