协慌网

登录 贡献 社区

停用 ONLY_FULL_GROUP_BY

我不小心启用了 ONLY_FULL_GROUP_BY 模式,如下所示:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?

答案

解决方案 1:从 MySQL 控制台删除ONLY_FULL_GROUP_BY

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

你可以在这里阅读更多

解决方案 2:从 phpmyadmin 中删除ONLY_FULL_GROUP_BY

  • 打开 phpmyadmin 并选择 localhost
  • 单击菜单变量并向下滚动至 sql 模式
  • 单击编辑按钮以更改值并删除ONLY_FULL_GROUP_BY ,然后单击保存。 在此处输入图片说明

更新:

在此处输入图片说明

为了保持您当前的 mysql 设置并禁用ONLY_FULL_GROUP_BY我建议访问您的 phpmyadmin 或您正在使用的任何客户端,然后键入:

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

下一个结果复制到您的my.ini文件中。

薄荷sudo nano /etc/mysql/my.cnf

ubuntu 16 及更高版本sudo nano /etc/mysql/my.cnf

ubuntu 14-16/etc/mysql/mysql.conf.d/mysqld.cnf

警告! copy_me结果可以包含一个长文本,默认情况下可能会对其进行修剪。确保复制全文!


旧答案:

如果要永久禁用错误,则 SELECT 列表的表达式 #N 不在 GROUP BY 子句中,并且包含非聚合列'db.table.COL',该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode = only_full_group_by 不兼容” 执行以下步骤:

  1. sudo nano /etc/mysql/my.cnf
  2. 将此添加到文件末尾

    [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"
  3. sudo service mysql restart以重启 MySQL

这将对所有用户ONLY_FULL_GROUP_BY

小心使用

SET sql_mode = ''

实际上,这将清除当前启用的所有模式。如果您不想弄乱其他设置,则需要做一个

SELECT @@sql_mode

首先,获取以逗号分隔的启用模式列表,然后将其设置为不带ONLY_FULL_GROUP_BY选项的列表。