mysql 5.5.46和5.6.28中日期时间类型的差异
在mysql 5.5.46中有表,在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,
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
上是如何工作的呢?根据您提供的信息,您似乎是在非严格模式下运行MySQL5.5.46
,但在严格模式下运行MySQL5.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=''代码>帮助了我