在mysql 5.5.46
和5.6.28
中的相同表格中有表格。我在mysql 5.5.46
上备份数据库,然后在5.6.28
上恢复它。因此,表在两台服务器上具有相同的结构和相同的数据。
CREATE TABLE `test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Path` varchar(250) NOT NULL,
`Link` varchar(250) NOT NULL,
`Company` varchar(250) NOT NULL,
`Width` int(11) NOT NULL,
`Height` int(11) NOT NULL,
`View_Count` int(11) NOT NULL DEFAULT '0',
`create_date` datetime NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8
像这样查询:
insert into test(path,link,company,width,height,view_count)
values('test','test','test',10,10,10)
在mysql 5.5.46
上,此查询成功执行,create_date值为'0000-00-00 00:00:00'
在mysql 5.6.28
上有一个错误Field 'Create_Date' doesn't have a default value
并且它在逻辑上是因为create_date不为null,因此它没有任何默认值。但它如何在5.5.46
上运作?
答案 0 :(得分:3)
根据您提供给我们的信息,您似乎在非严格模式下运行MySQL 5.5.46
,但在严格模式下运行MySQL 5.6.28
。来自MySQL documentation:
声明为NOT NULL且没有显式DEFAULT子句的TIMESTAMP列被视为没有默认值。对于为此类列指定无显式值的插入行,结果取决于SQL模式。如果启用了严格的SQL模式,则会发生错误。如果未启用严格的SQL模式,则会为该列分配隐式默认值&00; 00:00:00'并发出警告。 这类似于MySQL如何处理其他时间类型,例如DATETIME。
您的create_date
列的类型为DATETIME
,您似乎在严格模式下尝试在INSERT
数据库中执行5.6.28
,因此获得了错误。