将 Mysql 5.7 严格模式恢复到 5.6 状态的正确方法是什么?

将 Mysql 5.7 严格模式恢复到 5.6 状态的正确方法是什么?

我已将我们的服务器升级到包含 Mysql 5.7 的 Ubuntu 16,并且默认情况下启用严格模式(尽管在任何配置文件中都没有它的条目)。

我们在导入 mysql 5.6 及更早版本下生产中的数据库时遇到了问题,这是因为严格模式。默认情况下,启用了以下内容:

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

如何配置 mysql 5.7 使其与 5.6 完全一样工作,或者使得 5.6 中的数据库与 5.7 兼容?

答案1

要禁用严格的 SQL 模式,请通过 SSH 登录到您的服务器root并创建此文件:

/etc/mysql/conf.d/disable_strict_mode.cnf

打开文件并输入以下两行:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

使用以下命令重新启动 MySQL:

sudo service mysql restart

此更改禁用了 MySQL 5.7 中添加的两个 SQL 模式设置STRICT_TRANS_TABLESONLY_FULL_GROUP_BY,这两个设置会给一些较旧的应用程序带来问题。

确认严格 SQL 模式已禁用

您可以通过运行以下命令来确认严格 SQL 模式是否已禁用root

 sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

如果禁用严格模式,您将看不到该命令的任何输出。

如果禁用严格模式给您带来任何问题,您可以通过删除该文件并重新启动 MySQL 来再次启用它。

来源:如何在 MySQL 5.7 中禁用严格 SQL 模式

答案2

设置sql_mode/etc/mysql/mysql.conf.d/mysqld.cnfSTRICT_TRANS_TABLES

添加于[mysqld]

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

相关内容