mysql 相关错误 1067

由于在开发编码阶段会出现大量的空指针问题,为了减少处理空指针逻辑代码的冗余,在数据库设计阶段会给予表中字段的默认值。日期默认值也是如此,往往也可以设置默认值为0000-00-00 00:00:00,如下:

`ADOPT_END_TIME` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '领养结束时间',
`GROWTH_START_TIME` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '成长开始时间',
`GROWTH_END_TIME` timestamp(0) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '成长结束时间',

报错:

       由于MySQL默认设置中不支持日期datetime格式下的0000-00-00 00:00:00,而在创建表的时候会报出如下错误:1067 - Invalid default value for 'ADOPT_END_TIME' (“登录时间”的默认值无效。)

问题解决:

 这个问题就出在了MySQL的配置中,因为MySQL5.7不允许datetime类型设置为0000-00-00 00:00:00

 我们可以查询MySQL的配置数据库:sql_mode

select @@sql_mode;

显示结果:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

然而我们发现这一串字符串中的NO_ZERO_IN_DATE,NO_ZERO_DATE这两个配置限制了MySQL中datetime默认值为0,为了解决此问题,我们选择删除掉配置中的这个两个字符串。

 删除配置:

  • 方法1: 通过执行sql语句更改设置,执行以下sql语句修改MySQL中配置的数据库
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

SET @@sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  • 方法2: 修改磁盘中MySQL的配置文件my.ini,在[mysqld]标签下添加如下信息后,重启MySQL服务。最后重新创建表即可创建成功!
sql_mode=ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

猜你喜欢

转载自blog.csdn.net/wq_14365327/article/details/121661147
今日推荐