我的数据库出错了。我遇到时间戳的无效默认值。
这是我的数据库:
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;
答案 0 :(得分:6)
我遇到了同样的问题,我将类型从“datetime”更改为“timestamp”并且工作正常。我有mysql 5.5.52。
答案 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 = '';