当前位置: 首页 > article >正文

解决MySQL 5.6升5.7之后,非空有默认值的字段,报cannot be null Column ‘xxx‘的问题

背景

项目需要升级MySQL版本,打算5.6升5.7,升级后发现原本正常的部分SQL,不能正常工作。
字段定义为

created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

在之前的使用中,有的同事代码不规范,向此字段插入时,会直接插入null,而非不更新此字段的值
如下为错误写法:

INSERT INTO demo_table(name, email, created_time) VALUES ('alice', 'alice@gmail.com', null)

如下为正确写法:

INSERT INTO demo_table(name, email) VALUES ('alice', 'alice@gmail.com')

原因及解决方案

在MySQL5.6版本中,插入null,可自动填入默认值CURRENT_TIMESTAMP,而MySQL5.7的默认行为不一样,会直接报错cannot be null Column 'created_time'

解决方案:MySQL5.7引入了一个配置:explicit_defaults_for_timestamp, 默认是OFF,改为ON即可


http://www.kler.cn/a/596721.html

相关文章:

  • 客户端通过域名访问,dns解析,nfs共享,访问nginx服务首页内容
  • 基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
  • 数据库设计-笔记2
  • 私有云(一)私有云基础架构
  • 蓝桥杯12届 砝码称重
  • C++中的stoi和to_string函数详解:字符串与数值的高效转换工具
  • tauri2程序单例模式实现,二次点击桌面图标显示之前最小化的程序并聚焦
  • Java多线程与高并发专题——为何每次用完 ThreadLocal 都要调用 remove()?
  • 使用 pnpm 安装依赖包后,如果将依赖包直接复制内网环境中,可能会出现无法使用的情况,且不能联网下载,如何解决?
  • 《Python深度学习》第七讲:生成式深度学习
  • 2025最新智能优化算法:鹰鱼优化算法(HawkFish Optimization Algorithm,HFOA)求解23个经典函数测试集,MATLAB
  • JavaScript基础-删除事件(解绑事件)
  • Rust + 时序数据库 TDengine:打造高性能时序数据处理利器
  • Cursor的五种高级用法
  • 异地多活架构演进详解
  • 【GPT入门】第27课 Jupyter 感知到通过命令行生成的内核
  • 实验3 以太坊交易周期的需求分析
  • 菜鸟之路Day25一一前端工程化(二)
  • MATLAB深度学习全栈开发指南
  • 一键暂停更新,轻松掌控电脑节奏