2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

我注意到@Eyo-Okon-Eyo解决方案只要MySQL服务器没有重启,默认设置就会恢复。这里有一个对我有效的永久解决方案:

要删除特定的SQL模式(在本例中为ONLY_FUL_GROUP_BY),请查找当前的SQL模式:

SELECT @@GLOBAL.sql_mode;

复制结果并从中删除不需要的内容(ONLY_FUL_GROUP_BY)

例如。:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

to

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

创建并打开此文件:

/etc/mysql/conf.d/disable_strict_mode.cnf

并将新的SQL模式写入其中:

[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

重新启动MySQL:

sudo service mysql restart

或者您可以使用ANY_VALUE()抑制ONLY_FUL_GROUP_BY值拒绝,您可以在这里阅读更多信息

其他回答

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

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

我使用的是原理,我在docrine.local.php中添加了driverOptions:

return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => array(
                'host' => 'localhost',
                'port' => '3306',
                'user' => 'myusr',
                'password' => 'mypwd',
                'dbname' => 'mydb',
                'driverOptions' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
                ),
            ),
        ),
    ),
));

在phpmyadmin中,用户需要在权限中激活SUPER。

试试看:

SET sql_mode = ''

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

这是我在Mysql工作台上修复的操作:

在我使用以下命令获得当前值之前

SELECT @@sql_mode 

后来,我从列表中删除了ONLY_FUL_GROUP_BY键,并粘贴了以下命令

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'