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

use*_*182 12 mysql 16.04

我已将我们的服务器升级到包含 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 兼容?

Bil*_*lal 36

要禁用严格的 SQL 模式,请使用 SSH 连接到您的服务器root并创建此文件:

/etc/mysql/conf.d/disable_strict_mode.cnf
Run Code Online (Sandbox Code Playgroud)

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

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)

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

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

此更改禁用了 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'
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这是一个正确的答案,这应该被标记为已接受。 (2认同)