第 7 行的错误 1067 (42000):“LAST_UPDATED”的默认值无效

Yan*_*ang 4 mysql mysql-5.5

运行 MySQL 5.5,当我尝试导入 .sql 文件时出现上述错误

我检查了我的服务器的 SQL_MODE 并没有找到类似于“NO_ZERO_DATE”的内容

同样,我从 my.ini 文件中取出了“STRICT_MODE”的文本并重新启动了服务器,但此错误仍然存​​在

这是正在导入的 .sql 文件

CREATE TABLE  `street_segment` (
  `ID` int(8) NOT NULL,
  `PROVINCE_CODE` varchar(2) NOT NULL,
  `POSTAL_CODE` varchar(6) NOT NULL,
  `MUNICIPALITY_NAME` varchar(30) default NULL,
  `STATUS` varchar(16) NOT NULL,
  `LAST_UPDATED` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `DIRECTORY_AREA_NAME` varchar(30) default NULL,
  `STREET_NAME` varchar(255) default NULL,
  `STREET_TYPE_CODE` varchar(6) default NULL,
  `STREET_DIRECTION_CODE` varchar(2) default NULL,
  `ADDRESS_SEQ_CODE` int(8) default NULL,
  `STREET_ADDRESS_FROM_NUMBER` varchar(6) default NULL,
  `STREET_ADDRESS_TO_NUMBER` varchar(6) default NULL,
  `NUMBER_SUFFIX_FROM` varchar(6) default NULL,
  `NUMBER_SUFFIX_TO` varchar(6) default NULL,
  `SUITE_NUMBER_FROM` varchar(6) default NULL,
  `SUITE_NUMBER_TO` varchar(6) default NULL,
  `STREET_NAME_ACCENT_F` int(1) default 0,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

Mic*_*bot 12

当您尝试将文件导入 MySQL Server 5.6.4 及更早版本时,当数据库是在 MySQL 5.6.5 或更高版本上创建和导出时,可能会发生此错误。

如MySQL的5.6.5,的TIMESTAMPDATETIME列可以被自动initializated并更新为当前日期和时间(即,当前的时间戳)。在 5.6.5 之前,这仅适用于TIMESTAMP,并且TIMESTAMP每个表最多一列。”

—  https://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

有人建议解决方法是使用TIMESTAMP而不是DATETIME用于此列,因为这似乎有效,但该解决方案可能因多种原因而失败。此外,尽管它提供了针对此特定表工作的初始外观,但 5.6.5 之前的 MySQL 服务器版本还有其他限制和隐式行为TIMESTAMP列因此此解决方法并非在所有情况下都可用。

值得注意的是,在所有相当现代(5.x 及以上)版本的 MySQL 服务器中,TIMESTAMPDATETIME数据类型不能完全互换。 DATETIME列支持比数据库连接的时区概念更广泛的值,TIMESTAMPTIMESTAMP受制于数据库连接的时区概念,具有自动时区转换,而DATETIME不是。

由于数据库是在 5.6 或更高版本上创建的,为了获得最佳兼容性,您应该将其加载到也是 5.6 或更高版本的服务器上。在整个 5.x 系列中,事物通常是向后兼容的;也就是说,一般可以在更高版本的服务器上恢复转储文件,但由于引入了新功能,反过来就不那么正确了。

也可以看看: