2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

感谢@cwhisperer。我在Symfony应用程序中也遇到了同样的问题。我刚刚在config.yml中添加了选项:

doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            # PDO::MYSQL_ATTR_INIT_COMMAND
            1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

这对我来说很好。

其他回答

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

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

仅向sql_mode添加一种模式,而不删除现有模式:

SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));

仅从sql_mode中删除特定模式,而不删除其他模式:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));

在这种情况下,如果您只想删除only_FUL_GROUP_BY模式,请使用以下命令:

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

参考:http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html

更新:

要保持当前mysql设置并禁用ONLY_FUL_GROUP_BY,我建议访问phpmyadmin或您正在使用的任何客户端并键入:

SELECT REPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY','')copy_me

下一个将结果复制到my.ini文件。

薄荷:sudo nano/etc/mysql/my.cnf

ubuntu 16及以上:sudo nano/etc/mysql/my.cnf

ubuntu 14-16:/etc/mysql/mysql.conf.d/mysqld.cnf

小心copy_me结果可以包含一个长文本,默认情况下可以对其进行修剪。确保复制整个文本!


旧答案:

如果要永久禁用错误“SELECT列表的表达式#N不在GROUP BY子句中,并且包含非聚合列“db.table.COL”,该列在功能上不依赖GROUP BY子句的列;这与sql_mode=only_full_GROUP_BY不兼容”,请执行以下步骤:

sudo nano/etc/mysql/my.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_SUBSITION”sudo服务mysql重启以重启mysql

这将为所有用户禁用ONLY_FUL_GROUP_BY

MySQL文档还指定了以下方法:

在选项文件(如my.cnf(Unix操作系统)或my.ini(Windows))中设置sql mode=“<mode>”。要通过命令行在服务器启动时设置SQL模式,请使用--SQL mode=“<modes>”选项。

*其中<modes>是用逗号分隔的不同模式列表。

要显式清除SQL模式,请在命令行上使用--sqlmode=“”或在选项文件中使用sqlmode=”将其设置为空字符串。

我在/etc/my.cnf中添加了sqlmode=“”选项,并成功了。

这个SO解决方案讨论了找出MySQL正在使用哪个my.cnf文件的方法。

进行更改后不要忘记重新启动MySQL。

小心使用

SET sql_mode = '' 

这实际上清除了当前启用的所有模式。如果你不想弄乱其他设置,你可以做一个

SELECT @@sql_mode 

首先,要获得一个以逗号分隔的启用模式列表,然后将其设置为该列表,而不使用ONLY_FUL_GROUP_BY选项。