2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

MySQL 8.x的“优化器提示”呢?

例如:

SELECT /*+ SET_VAR(sql_mode='STRICT_TRANS_TABLES') */
... rest of query

更多信息:https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html#optimizer-提示集变量

其他回答

对于使用cPanel/WHM运行VPS/Server的用户,可以执行以下操作永久禁用ONLY_FUL_GROUP_BY

您需要root访问权限(在VPS或专用服务器上)

输入WHM作为root用户并运行phpMyAdmin单击Variables,查找sql_mode,单击Edit,然后复制文本框中的整行

例如,复制以下内容:

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

通过SFTP-SSH(root)连接到服务器,并下载文件/etc/my.cnf使用本地PC上的文本编辑器my.cnf文件打开,并将在步骤(2)中复制的整行粘贴到其中(在[mysqld]部分下),但删除ONLY_FUL_GROUP_BY,

例如粘贴此:

# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

保存my.cnf文件并将其上载回/etc/输入WHM并转到“WHM>重新启动服务>SQL Server(MySQL)”并重新启动服务

我使用mysql并注册了root用户,适合我的解决方案如下:

mysql>设置会话sql_mode=(SELECTREPLACE(@@sql_mode,'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

仅向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

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

这对我来说很好。