2016-01-20 157 views

回答

1

结构确保你使用的是最新的MySQL 5.7版本比5.7.7版本更新,或者禁用严格模式。 Versions 5.7.4 to 5.7.7 incorporated NO_ZERO_DATE SQL mode into strict mode.

在MySQL 5.7.4中,ERROR_FOR_DIVISION_BY_ZERONO_ZERO_DATE,并且NO_ZERO_IN_DATE SQL模式已被弃用。从MySQL 5.7.4到5.7.7,这些模式在明确命名时不会执行任何操作。相反,它们的效果包含在严格SQL模式的影响中(STRICT_ALL_TABLESSTRICT_TRANS_TABLES)。 换句话说,严格模式在这些版本中的含义与严格模式加上ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATENO_ZERO_IN_DATE之前的5.7.4含义相同。

MySQL 5.7.4更改严格模式更严格,包括ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATENO_ZERO_IN_DATE引起了一些问题。例如,在MySQL 5.6中使用严格模式但未启用NO_ZERO_DATE,可以使用DEFAULT '0000-00-00 00:00:00'来定义TIMESTAMP列。 在具有相同模式设置的MySQL 5.7.4中,严格模式包含NO_ZERO_DATETIMESTAMP列的效果不能用DEFAULT '0000-00-00 00:00:00'定义。这会导致CREATE TABLE语句从5.6到5.7.4的复制失败(如果它们包含TIMESTAMP列)。

+0

好的,我明白了。 :D谢谢。但我能做些什么来解决。我需要使用ZERO_DATE。这个ZERO_DATE是否可以在5.7中启用? – Rampagre3e3121312324

+0

如果我更改为NULL,应该罚款? – Rampagre3e3121312324

+0

如果需要,请禁用严格模式。它是否能与NULL一起工作完全取决于你的应用程序逻辑。 – miken32