mysql 5.5.46和5.6.28中datetime类型的区别

时间:2015-12-16 07:51:40

标签: mysql sql datetime

mysql 5.5.465.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上运作?

1 个答案:

答案 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,因此获得了错误。