2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_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。

其他回答

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

mysql>设置会话sql_mode=(SELECTREPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY','');

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

小心使用

SET sql_mode = '' 

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

SELECT @@sql_mode 

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

您可以使用配置文件my.cnf禁用它:

$ mysql --verbose --help | grep my.cnf

因此,在macOS 10.12中,它位于usr/local/etc/my.cnf。您可以在此处编辑sql_mode:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

我使用的是原理,我在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。