将Mysql 5.7严格模式还原为5.6的正确方法是什么?


10

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


试试这个答案:stackoverflow.com/a/34426883/534883事件,尽管它适用于OSX,但它在Ubuntu上对我有用。
2016年

Answers:


34

要禁用严格的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
这是一个正确的答案,应该将其标记为已接受。
budhajeewa

为什么运行命令mysql命令返回: mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!
Abhishek Saini

1
@AbhishekSaini,看看这个这个
Bilal

1
这是一个答案。请将此作为答案。
Lasitha Benaragama

0

设置sql_mode/etc/mysql/mysql.conf.d/mysqld.cnf不带STRICT_TRANS_TABLES

在下添加[mysqld]

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.