打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于mysql字段时间类型timestamp默认值为当前时间问题

今天把应用部署到AWS上发现后台修改内容提交后程序报错,经过排查发现是更新数据的时候,有张数据表中的一个timestamp类型的字段默认值变成了"0000-00-00 00:00:00.000000"格式,导致解析失败造成的。

在MySQL该字段的创建语句如下

`XXX` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  正常情况下 应该是当前数据更改的时间格式

因为在本地开发环境测试过,没有该问题,应用环境一直,唯一不同的是,生产环境数据库用的是AWS的RDS的mysql,经过对错误信息的搜索,大致应该是mysql参数配置的问题。

 

看了下mysql官方文档

By default, the first TIMESTAMP column has both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP if neither is specified explicitly。

很多时候,这并不是我们想要的,如何禁用呢?

1. 将“explicit_defaults_for_timestamp”的值设置为ON。

2. “explicit_defaults_for_timestamp”的值依旧是OFF,也有两种方法可以禁用

     1> 用DEFAULT子句该该列指定一个默认值

     2> 为该列指定NULL属性。

 
mysql> show variables like '%explicit_defaults_for_timestamp%';+---------------------------------+-------+| Variable_name                   | Value |+---------------------------------+-------+| explicit_defaults_for_timestamp | OFF   |+---------------------------------+-------+row in set (0.00 sec)
 

开发环境explicit_defaults_for_timestamp 的值是OFF


比对了下RDS中mysql的参数,发现这个参数值为0,因为rds中mysql的默认参数组是不允许修改的,所以创建个参数组,会默认把default的参数组继承过来,当时并不知道这里的0和1是怎么对应on和off的,所以就把值改成了1.然后重启rds。

此时发现就不会有该错误了。

将rds中mysql的参数改成如下情况 完美解决

explicit_defaults_for_timestamp = 1

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MYSQL timestamp NOT NULL插入NULL的报错问题
ERROR 1067 (42000): Invalid default value for 'end
mysql数据库怎么获得当前日期? - 扬帆☆启航 - 博客园
MySQL的时间戳timestamp datetime
mysql TIMESTAMP 不能为NULL
python+django+mysql高校校园外卖点餐系统--计算机毕设项目
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服