【问题标题】:Invalid default value for 'last_modified'“last_modified”的默认值无效
【发布时间】:2015-08-26 16:58:55
【问题描述】:

MySQL Distrib 5.5

操作系统:Ubuntu 14.04

我尝试使用以下命令将数据库 sql 脚本导入 MySQL:

mysql -u root databaseName < databaseName.sql

在创建 BD 并加载转储时,我收到以下错误:

ERROR 1067 (42000) at line 5: Invalid default value for 'last_modified'

42000

CREATE TABLE IF NOT EXISTS `vote`.`user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `first_name` VARCHAR(100) NOT NULL,
  `last_name` VARCHAR(100) NOT NULL,
  `username` VARCHAR(100) NOT NULL,
  `password` VARCHAR(100) NOT NULL,
  `phone` VARCHAR(20) NOT NULL,
  `enabled` TINYINT(1) NOT NULL,
  `last_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `validation_code` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `username_idx` (`username` ASC),
  INDEX `first_last_name_idx` (`first_name` ASC, `last_name` ASC),
  INDEX `last_first_name_idx` (`last_name` ASC, `first_name` ASC),
  UNIQUE INDEX `phone_idx` (`phone` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

您知道导致此错误的原因吗?我该如何解决?

【问题讨论】:

  • 将问题减少到最小的测试用例:从 databaseName.sql 中删除行,直到找出问题为止。
  • 能否显示select current_timestamp();的结果?
  • 这个问题有同样的错误信息,但建议使用 CURRENT_TIMESTAMP(你已经这样做了)——它可能与 SQL 模式有关吗? stackoverflow.com/questions/23312144/…
  • 终于能够解决这个问题,似乎 CURRENT_TIMESTAMP 不能被 DATETIME 字段接受,我不得不将其更改为 TIMESTAMP。

标签: mysql timestamp ddl


【解决方案1】:

您需要在具有默认时间戳的列中使用TIMESTAMP 数据类型。

`last_modified` DATETIME  NOT NULL DEFAULT CURRENT_TIMESTAMP,  /*wrong*/

`last_modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,  /*right*/

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2018-01-05
    • 1970-01-01
    • 2020-12-01
    • 2014-12-07
    • 2017-06-06
    • 1970-01-01
    • 2016-06-28
    • 2019-02-28
    相关资源
    最近更新 更多