尝试在我的博客帖子表中插入新列作为我的网站更新的一部分。
这是我正在使用的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()
);
因此,作为参考,这似乎不是一个重复的问题。
答案 0 :(得分: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()
都需要他们要重新组合。