2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

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

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

使用MySQL 5.7.28版检查SELECT@@sql_mode;并使用更新

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'

我注意到@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值拒绝,您可以在这里阅读更多信息

如果任何使用Drupal 8的人在mysql 8中遇到这个问题,我通过添加这段代码覆盖默认配置来解决这个问题。

资料来源:https://www.drupal.org/project/drupal/issues/2856270

选项,以防万一:

'init_commands' => array(
    'sql_mode' => "SET sql_mode =''"
  )