“ dateAdded”的默认值无效


90

我遇到了一个无法解决的SQL愚蠢问题。

ALTER TABLE`新闻` 
 ADD`dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 添加主键(`dateAdded`)

错误:

(#1067)Invalid default value for 'dateAdded'

有人可以帮我吗?


8
这可能是一个愚蠢的问题,但是为什么AUTO_INCREMENT DATETIME呢?
jave.web

Answers:


137

CURRENT_TIMESTAMP仅在TIMESTAMP字段上可接受。DATETIME字段必须保留为空的默认值,或者根本不保留任何默认值-默认值必须为常量值,而不是表达式的结果。

相关文档:http : //dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

您可以通过在表上设置插入后触发器以在任何新记录上填充“现在”值来解决此问题。


70
从mysql 5.6.5开始,您可以将CURRENT_TIMESTAMP与DATETIME字段一起使用。见dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
弗兰克Schwieterman

2
谢谢弗兰克,当尝试从最新的xampp导入导出的数据库到较早的数据库时,发现了此问题。
HCD 2014年

HCD,Frank ...发现了从MariaDb 10.x导出到MariaDB 5.5的相同问题...谢谢
Aukhan

1
此错误也发生在mariadb 5.5中。升级到mariadb 10并解决。感谢弗兰克
塞缪尔·特斯勒2015年


16

在MySQL 5.7.x上指定DATETIMEas DATETIME(3)或like 时,也要注意,还必须为添加相同的值CURRENT_TIMESTAMP(3)。如果不是,它将继续抛出“ 无效的默认值 ”。


这为我在5.7.x上解决了问题。我的datetime字段定义为datetime(6),并使用CURRENT_TIMESTAMP(6)解决了问题
Brad

这是非常值得注意的。
Mateus Felipe '18

1

我遇到了同样的问题,以下修复解决了我的问题。

  • 选择类型为“ TIMESTAMP”

  • 不要在“长度/值”字段中输入任何内容。保持空白

  • 选择CURRENT_TIMESTAMP作为默认值。

我正在使用MySQL ver 5.5.56



0

mysql 5.5版本将datetime默认值设置为CURRENT_TIMESTAMP将报告错误,您可以更新到5.6版,它将datetime默认值设置为CURRENT_TIMESTAMP


0

从日期时间更改类型为时间戳,它将起作用!我对于mysql 5.5.56-MariaDB有相同的问题-MariaDB服务器希望它可以帮助...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.