2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

以防其他人和我面临同样的问题。在Ubuntu 16.04上,它唯一对我有效的持久解决方案是:

编辑/lib/systemd/system/mysql.service并将其设置为:

[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
# Normally, we'd simply use:
# ExecStart=/usr/sbin/mysqld
ExecStart=/usr/sbin/mysqld --sql-mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ExecStartPost=/usr/share/mysql/mysql-systemd-start post
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755`

其他回答

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-提示集变量

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

试试看:

SET sql_mode = ''

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

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

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

选项,以防万一:

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

小心使用

SET sql_mode = '' 

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

SELECT @@sql_mode 

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