'create_date' 时间戳字段的默认值无效。

14 浏览
0 Comments

'create_date' 时间戳字段的默认值无效。

我有以下 SQL 创建语句

mysql> CREATE  TABLE IF NOT EXISTS `erp`.`je_menus` (
    ->   `id` INT(11) NOT NULL AUTO_INCREMENT ,
    ->   `name` VARCHAR(100) NOT NULL ,
    ->   `description` VARCHAR(255) NOT NULL ,
    ->   `live_start_date` DATETIME NULL DEFAULT NULL ,
    ->   `live_end_date` DATETIME NULL DEFAULT NULL , 
    ->   `notes` VARCHAR(255) NULL ,
    ->   `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    ->   `created_by` INT(11) NOT NULL ,
    ->   `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    ->   `updated_by` INT(11) NOT NULL , 
    ->   `status` VARCHAR(45) NOT NULL ,
    ->   PRIMARY KEY (`id`) ) 
    -> ENGINE = InnoDB;

导致以下错误

ERROR 1067 (42000): Invalid default value for \'create_date\'

这里出了什么错误?

admin 更改状态以发布 2023年5月21日
0
0 Comments

如果你是从MySQL Workbench生成脚本。\n以下一行将会被生成\n

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

\n将SQL_MODE中的TRADITIONAL删除,然后脚本就可以正常工作了。\n否则,您可以将SQL_MODE设置为允许无效日期。\n

SET SQL_MODE='ALLOW_INVALID_DATES';

0
0 Comments

这是因为服务器 SQL 模式的设置 - NO_ZERO_DATE

根据参考资料: NO_ZERO_DATE - 在严格模式下,不允许使用 '0000-00-00' 作为有效日期。您仍可以使用 IGNORE 选项插入零日期。非严格模式下,日期会被接受,但会生成警告。

0