2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

在MySQL 5.7和Ubuntu 16.04上,编辑文件MySQL.cnf。

$ sudo nano /etc/mysql/conf.d/mysql.cnf

包括如下所示的sql_mode并保存文件。

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

注意,在我的例子中,我删除了模式STRICT_TRANS_TABLES和ONLY_FUL_GROUP_BY。

这样做,它将永久保存模式配置。如果您只是通过MySQL更新@@sql_mode,则会有所不同,因为它会在机器/服务重新启动时重置。

之后,要使修改后的配置生效,请重新启动mysql服务:

$ sudo service mysql restart

尝试访问mysql:

$ mysql -u user_name -p

如果您能够登录并访问MySQL控制台,那就好了。太好了!

但是,如果像我一样,您会遇到错误“未知变量sql_mode”,这表明sql_mode是mysqld的一个选项,那么您必须返回,再次编辑文件mysql.cnf并将[mysql]更改为[mysqld]。重新启动MySQL服务并进行最后一次测试,尝试登录MySQL控制台。给你!

其他回答

如果您正在使用WAMP。左键单击WAMP图标,然后转到MySQL->MySQL设置->sql模式然后选择sql模式->用户模式

从MySQL 5.7.x开始,默认的sql模式包括ONLY_FUL_GROUP_BY。

(在5.7.5之前,MySQL不检测功能依赖性,默认情况下未启用ONLY_FUL_GROUP_BY)。

ONLY_FUL_GROUP_BY:将拒绝非确定性分组查询

有关更多详细信息,请查看sql_mode的文档

您可以按照以下任一方法修改sql_mode

方法1:

检查sql_mode的默认值:

SELECT @@sql_mode

通过执行以下查询从控制台中删除ONLY_FUL_GROUP_BY:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

方法2:

访问phpmyadmin以编辑sql_mode

登录phpmyadmin并打开localhost在菜单项的顶部显示变量,并搜索sql模式单击编辑按钮删除ONLY_FUL_GROUP_BY并保存

重新启动MySQL服务器

 sudo service mysql restart

OR

注销phpmyadmin并再次登录。

试试看:

SET sql_mode = ''

社区注意:正如下面的答案所指出的,这实际上清除了当前启用的所有SQL模式。这不一定是你想要的。

以下是我通过phpmyadmin仪表板更改Mysql配置的解决方案:

为了修复“这与sql_mode=only_full_group_by不兼容”:打开phpmyadmin并转到主页,然后选择“变量”子菜单。向下滚动以查找sql模式。编辑sql模式并删除“ONLY_FUL_GROUP_BY”保存它。

On:

Ubuntu 14.04mysql版本14.14 Distrib 5.7.16,适用于Linux(x86_64),使用EditLine包装器

Do:

$ sudo nano /etc/mysql/conf.d/mysql.cnf

复制和粘贴:

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

到文件底部

$ sudo service mysql restart