2023-05-10 08:00:02

禁用ONLY_FUL_GROUP_BY

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

如何禁用它?


当前回答

试试看:

SET sql_mode = ''

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

其他回答

更新:

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

SELECT REPLACE(@@sql_mode,'ONLY_FUL_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不兼容”,请执行以下步骤:

sudo nano/etc/mysql/my.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_SUBSITION”sudo服务mysql重启以重启mysql

这将为所有用户禁用ONLY_FUL_GROUP_BY

如果sql_mode上有ANSI,需要注意一点:

等效于REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE和(从MySQL 5.7.5开始)ONLY_FUL_GROUP_BY。

看见https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi

试试看:

SET sql_mode = ''

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

对于MySql 8,您可以尝试这个。(未在5.7中进行测试。希望它在那里也适用)

首先打开此文件

sudo vi/etc/mysql/my.cnf并将以下代码粘贴在上述文件的末尾

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

然后通过运行这个sudo服务mysql restart重新启动mysql

这是Ubuntu 14+上MySql 5.7+的永久解决方案:

$ sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"  >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name

如果您能够登录而不出错,那么现在就应该做好准备。