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',''))"

这对我来说很好。

其他回答

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

对于MySql 8,您可以尝试这个。(未在5.7中进行测试。希望它在那里也适用)

首先打开此文件

sudo vi/etc/mysql/my.cnf并将以下代码粘贴在上述文件的末尾

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

然后通过运行这个sudo服务mysql restart重新启动mysql

从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并再次登录。

检查sql_mode的默认值:SELECT@@sql_mode;通过执行以下查询从控制台中删除ONLY_FUL_GROUP_BY:

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

还将其从特定数据库中删除

使用数据库名称;

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

重新启动web应用服务器访问导致此问题的页面。现在就可以了。

OR

在my.cnf文件中添加以下内容sql_mode=“传统”

注意:如果您正在使用mac my.cnf,可以在/usr/local/etc/my.cnf中找到

或尝试此链接https://dev.mysql.com/doc/refman/8.0/en/option-files.html

重新启动MySQL服务器sudo/usr/local/bin/mysql.server重启或brew服务重新启动mysql

在我的sql(在Mac OS X上运行的5.7.11版本)上,我可以在mysql shell客户端上使用此功能:

SET
@@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

根据MySQL 5.6文档,sql_mode默认为

MySQL 5.6.5及其后版本中的空白字符串5.6.6中的NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES+

mysql 5.6参考