【问题标题】:MySQL: CURRENT_TIMESTAMP for date field works locally but not on serverMySQL:日期字段的 CURRENT_TIMESTAMP 在本地工作,但不在服务器上
【发布时间】:2014-10-27 22:02:55
【问题描述】:

我有一个默认值为CURRENT_TIMESTAMP 的日期列。它在本地运行良好,但是当我进行导出并尝试在主机上创建数据库时,我得到了这个:

`Invalid default value for 'created'`

...从此代码:

CREATE TABLE IF NOT EXISTS `bookings` (
  `id` varchar(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `cloned` int(11) DEFAULT NULL,
  `event_id` varchar(11) NOT NULL,
  `amount_due` smallint(6) NOT NULL,
  `vat` tinyint(2) NOT NULL,
  `discount` tinyint(4) DEFAULT NULL,
  `date_paid` date DEFAULT NULL,
  `notes` mediumtext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

this question 的答案说,显然,CURRENT_TIMESTAMP 仅适用于日期时间列,而不是日期列。但就像我说的,它在本地工作,而不是远程工作。

会不会是 MySQL 版本的不同造成的?

  • 本地 MySQL:协议 v10 / 服务器 v5.6.16

  • 远程 MySQL:协议 v10 / 服务器 v5.5.35

由于服务器版本较高,我是否可以在本地解决这个问题?

【问题讨论】:

  • "CURRENT_TIMESTAMP 是一个可接受的默认值,仅适用于日期时间,而不是日期、列" - 在您的 SQL 中 created 是一个日期时间列...
  • @ODaniel - 很好发现,所以这件事对我来说似乎是不适用的。 Senk - 谢谢,我刚刚读过。看来这可能是一个版本的事情,那么。

标签: mysql database import export


【解决方案1】:

这不适用于 MySQL 5.5; mysql 5.6.5 之前的CURRENT_TIMESTAMP 仅适用于TIMESTAMP

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

它在本地为您工作,因为您在那里使用的是 MySQL 5.6.16。

【讨论】:

  • 谢谢 - 正如我所料。
【解决方案2】:

在 MySQL 手册中,建议将 Timestamp 数据类型与“DEFAULT CURRENT_TIMESTAMP”一起使用。

还要考虑这个(取自 MySQL 手册): 表中的一个 TIMESTAMP 列可以将当前时间戳作为初始化该列的默认值、作为自动更新值,或两者兼而有之。不能将当前时间戳设置为一列的默认值和另一列的自动更新值。

【讨论】:

  • 自动更新是否也适用于本地的两列?
【解决方案3】:

尝试使用

createdTIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    相关资源
    最近更新 更多