【MySQL】1067 – Invalid default value for ‘indb_time’
xixuefeng
MySQL
2018-04-13 8:57:16
1,243 次浏览
mysql err 1067
【MySQL】1067 – Invalid default value for ‘indb_time’已关闭评论
场景描述:
MySQL 5.7 给t表增加一个字段(利用Navicat工具进行操作),提示[1067 – Invalid default value for ‘indb_time’]错误。
操作过程:
首先通过图形化页面添加字段后,点击保存,提示[1067 – Invalid default value for ‘indb_time’]错误
遇到这个错误,网上好多解释是因为sql_mode 中的 values 包含 NO_ZERO_IN_DATE,NO_ZERO_DATE ,去除即可。
|
1 2 3 4 5 6 7 8 9 |
mysql> show variables like 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------+ 1 row in set (0.04 sec) mysql> |
很遗憾,我的数据库中sql_mode参数压根就没有这两个值。
然后我将图形化工具生成的SQL,在命令行中执行,如下:
|
1 2 3 |
mysql> ALTER TABLE `xxfdb`.`t` ADD COLUMN `indb_time` timestamp(255) NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `name`; 1067 - Invalid default value for 'indb_time' mysql> |
还是报同样错误。
仔细观察会发现,增加的字段indb_time的数据类型timestamp后面竟然有个255,原因是,图形化工具在你写字段名称时自动给默认了个数据类型,导致有了大小。
那么知道问题所在了,解决起来就容易了,只要把255去掉就可以了。
|
1 2 3 4 5 |
mysql> ALTER TABLE `xxfdb`.`t` ADD COLUMN `indb_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `name`; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> |