报错版本:mysql-5.7.35
1、报错完整提示信息;
ERROR 1067 (42000): Invalid default value for 'LOCK_TIME_'
2、原因:
使用source命令迁移activiti表数据sql的时候,其中act_evt_log表create报错,完整的create语句:
CREATE TABLE `ACT_EVT_LOG` (
`LOG_NR_` bigint(20) NOT NULL AUTO_INCREMENT,
`TYPE_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`DATA_` longblob,
`LOCK_OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`LOCK_TIME_` timestamp(3) DEFAULT NULL,
`IS_PROCESSED_` tinyint(4) DEFAULT 0,
PRIMARY KEY (`LOG_NR_`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
可以看到报错的字段LOCK_TIME_为timestamp类型,且默认为null,因为是mysql5.7.x版本,会有一个严格模式,而在此模式下默认是不允许设置日期时间的值为全0值的。
3、解决:
调整sql_mode、explicit_defaults_for_timestamp两个参数的值。(下面步骤是临时调整,mysql重启会失效,如果需要永久调整的话得将配置写在my.cnf中,然后重启mysql让其生效)
步骤如下:
# 1.查询sql_mode的值
mysql> select @@sql_mode;
# 2.将查询的值去掉NO_ZERO_IN_DATE,NO_ZERO_DATE,将剩余的值重新赋给sql_mode
mysql> set global sql_mode = '修改后的值';
# 3.同时MySQL5.7.x的explicit_defaults_for_timestamp默认值为OFF,这与sql_mode的NO_ZERO_DATE也是相冲突的,需要修改为ON。
mysql> show variables like 'explicit_defaults_for_timestamp';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF |
+---------------------------------+-------+
1 row in set (0.00 sec)
mysql> set @@explicit_defaults_for_timestamp = 1;
Query OK, 0 rows affected (0.00 sec)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?