问题】在新建一个表的时候,初始化一个 timestamp 为 '0000-00-00 00:00:00' 时:
-
CREATE TABLE `test` ( -
`created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -
`last_updated_on` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', -
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, -
PRIMARY KEY (`id`) -
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
报错:ERROR 1067 (42000): Invalid default value for 'last_updated_on'
【解决方法】:
去掉 sql_mode 中的 values: NO_ZERO_IN_DATE,NO_ZERO_DATE 即可:
show variables like 'sql_mode';

修改 sql_mode:
-
set session -
sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看修改的结果:
show variables like 'sql_mode';

这个时候再执行建表命令,就正常了:)
本文详细介绍了在创建MySQL表时设置timestamp字段默认值为'0000-00-00 00:00:00'导致的错误,并提供了调整sql_mode参数以解决问题的具体步骤。
457

被折叠的 条评论
为什么被折叠?



