mysql 5.5.46和5.6.28中日期时间类型的差异

mysql 5.5.46和5.6.28中日期时间类型的差异,mysql,sql,datetime,Mysql,Sql,Datetime,在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,

在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上
此查询成功执行并创建日期值为
'0000-00-00:00:00'


在mysql 5.6.28上,出现一个错误
字段“Create_Date”没有默认值
,这是因为Create_Date在逻辑上不为null,所以没有任何默认值。但是它在
5.5.46
上是如何工作的呢?

根据您提供的信息,您似乎是在非严格模式下运行MySQL
5.5.46
,但在严格模式下运行MySQL
5.6.28
。从:

声明为NOTNULL且没有显式DEFAULT子句的TIMESTAMP列被视为没有默认值。对于没有为此类列指定显式值的插入行,结果取决于SQL模式。如果启用了严格SQL模式,则会发生错误。如果未启用严格SQL模式,则会为该列指定隐式默认值“0000-00-00 00:00:00”,并出现警告这与MySQL处理其他时态类型(如DATETIME)的方式类似。


您的
create\u date
列的类型为
DATETIME
,您似乎试图在
5.6.28
数据库中以严格模式插入
,因此出现错误。

谢谢您的回答<代码>设置@@global.sql_mode=''帮助了我