我试图调整我们从mySQL 5.5服务器迁移到5.7服务器的数据库。它抱怨日期为0000-00-00
格式。我试图解决这个问题,但我无法解决错误。
在 my.cnf 中,我有:
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,TRADITIONAL,ALLOW_INVALID_DATES
我重启mySQL,然后在phpmyadmin中执行此操作:
SHOW VARIABLES LIKE 'sql_mode'
但是它显示了一个完全错误/不同的列表!
sql_mode
STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
我做错了什么?这让我疯了!
答案 0 :(得分:2)
根据manual,TRADITIONAL
包含其他几种模式:
<强>传统强>
在MySQL 5.7.4之前,在MySQL 5.7.8及更高版本中,
TRADITIONAL
相当于STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER
和NO_ENGINE_SUBSTITUTION
。从MySQL 5.7.4到5.7.7,
TRADITIONAL
相当于STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_AUTO_CREATE_USER
和NO_ENGINE_SUBSTITUTION
。NO_ZERO_IN_DATE, NO_ZERO_DATE
和ERROR_FOR_DIVISION_BY_ZERO
模式未命名,因为在这些版本中,它们的效果包含在严格SQL模式(STRICT_ALL_TABLES
或STRICT_TRANS_TABLES
)的效果中。因此,TRADITIONAL
的效果在所有MySQL 5.7版本中都是相同的(和MySQL 5.6中的相同)。有关其他讨论,请参阅MySQL 5.7中的SQL模式更改。
因此预期模式的扩展,并且您的两种模式对于MySQL 5.7.8+是等效的。实际上评估了sql模式设置:你可以看到例如您的最终模式包括配置文件中定义的非默认ALLOW_INVALID_DATES
。