“timestamp”的默认值无效

时间:2016-04-20 14:32:27

标签: mysql database

我的数据库出错了。我遇到时间戳的无效默认值。

这是我的数据库:

CREATE TABLE IF NOT EXISTS `post` (
`id` int(11) NOT NULL,
  `text` varchar(10000) NOT NULL,
  `threadId` int(11) NOT NULL,
  `userId` int(11) NOT NULL,
  `dateCreated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `isModified` tinyint(4) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=171 DEFAULT CHARSET=latin1;



CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `color` varchar(10) DEFAULT '#00bcd4',
  `icon` varchar(100) NOT NULL DEFAULT 'https://mymonas.com/forum/category_icon/ic_question.png'
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

5 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,我将类型从“datetime”更改为“timestamp”并且工作正常。我有mysql 5.5.52。

Mysql_error

答案 1 :(得分:2)

使用CURRENT_TIMESTAMP()代替CURRENT_TIMESTAMP

即。

CREATE TABLE IF NOT EXISTS `post` (
`id` int(11) NOT NULL,
  `text` varchar(10000) NOT NULL,
  `threadId` int(11) NOT NULL,
  `userId` int(11) NOT NULL,
  `dateCreated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(),
  `timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
  `isModified` tinyint(4) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=171 DEFAULT CHARSET=latin1;

Now()也适用

答案 2 :(得分:1)

从MySQL 5.5手册:

  

“您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。例外情况是您可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。”

MYSQL 5.6.x中允许使用该功能的更改在此处记录:

  

“从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,并且对于每个表最多一个TIMESTAMP列。“

所以,这意味着你使用的是旧版本的mysql,要么你可以使用datetime数据类型升级你的mysql版本

答案 3 :(得分:1)

@max Sherbakov的帮助下奏效了,但我认为这样做冒险,

如果您执行SET sql_mode = '';查询。

因为您或其他用户 SET sql_mode

中有任何其他变量,

like NO_ENGINE_SUBSTITUTION check other SQL MODES

通过更改 my.ini 文件

中的 sql_mode

OR

使用SET sql_mode = 'YOUR_VARIABLE_LIST';查询

它为您解决了当前情况

但是在其他项目中造成问题。

  • 要查看当前的sql模式,请使用以下查询

    show variables like 'sql_mode' ;

答案 4 :(得分:0)

我在sql_mode中有同样的问题。

进行查询:

show variables like 'sql_mode' ; 

您需要从sql_mode中删除“ NO_ZERO_IN_DATE,NO_ZERO_DATE”。

SET sql_mode = '';