【问题标题】:MySQL error when trying to add new columns [duplicate]尝试添加新列时出现 MySQL 错误 [重复]
【发布时间】:2016-04-16 11:38:01
【问题描述】:

尝试在我的网站更新过程中将新列插入我的博客文章表中。

这是我正在使用的mysql代码:

ALTER TABLE blogposts
  ADD (
    postType varchar(20),
    postDate datetime NOT NULL DEFAULT CURDATE(),
    postTime datetime NOT NULL DEFAULT CURTIME()
  );

虽然在执行时会抛出这个错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURDATE(),
      postTime datetime NOT NULL DEFAULT CURTIME()
  )' at line 4 

我认为 curdate() 是问题所在,但不明白为什么,因为它是一个有效的 mysql 函数。

这不是 this 提议的重复。,该帖子中的解决方案没有解决我的问题,而是抛出了这个错误:

#1067 - Invalid default value for 'postDate' 

使用代码时:

ALTER TABLE blogposts
  ADD (
    postType varchar(20),
    postDate datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    postTime datetime NOT NULL DEFAULT CURTIME()
  );

所以作为参考,这似乎不是一个重复的问题。

【问题讨论】:

  • 你也不能使用CURTIME()。当您可以使用CURRENT_TIMESTAMP 覆盖这两列时,为什么需要两列,一列用于日期,一列用于时间?
  • 因为我希望它们默认分开,以便于从后端调用。必须有办法做到这一点,因为这些是有效的 mysql 函数,甚至 w3c 都说它应该在这个 reference 和这个 reference 中工作。
  • 那么,我想知道的是,当这些功能有效时,为什么这不起作用以及如何使它起作用。
  • 按照我期望的方式工作。

标签: mysql


【解决方案1】:

DATETIME 列的默认值在 MySQL Server 5.6.5 之前不可用。

在 5.6.5 及更高版本中,您指定的默认值必须是 CURRENT_TIMESTAMP 或返回 datetime 值的等效表达式。

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

因为我希望它们默认分开,以便于从后端调用。

这似乎有点轻率的动机,如果需要,您可以SELECT TIME(c1) AS teh_time, DATE(c1) AS teh_date,并且几乎任何您想做的其他操作,如日期时间数学、时区转换或DATE_FORMAT() 都需要重新组合它们.

【讨论】:

  • 很好的答案
猜你喜欢
  • 1970-01-01
  • 2013-11-16
  • 2018-05-25
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多