您好,欢迎访问一九零五行业门户网

关于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
其它类似信息

推荐信息