我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
当前回答
对于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
其他回答
这是我在Mysql工作台上修复的操作:
在我使用以下命令获得当前值之前
SELECT @@sql_mode
后来,我从列表中删除了ONLY_FUL_GROUP_BY键,并粘贴了以下命令
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'
感谢@cwhisperer。我在Symfony应用程序中也遇到了同样的问题。我刚刚在config.yml中添加了选项:
doctrine:
dbal:
driver: pdo_mysql
options:
# PDO::MYSQL_ATTR_INIT_COMMAND
1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
这对我来说很好。
更新:
要保持当前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的默认值:SELECT@@sql_mode;通过执行以下查询从控制台中删除ONLY_FUL_GROUP_BY:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY',''));
还将其从特定数据库中删除
使用数据库名称;
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FUL_GROUP_BY',''));
重新启动web应用服务器访问导致此问题的页面。现在就可以了。
OR
在my.cnf文件中添加以下内容sql_mode=“传统”
注意:如果您正在使用mac my.cnf,可以在/usr/local/etc/my.cnf中找到
或尝试此链接https://dev.mysql.com/doc/refman/8.0/en/option-files.html
重新启动MySQL服务器sudo/usr/local/bin/mysql.server重启或brew服务重新启动mysql
On:
Ubuntu 14.04mysql版本14.14 Distrib 5.7.16,适用于Linux(x86_64),使用EditLine包装器
Do:
$ sudo nano /etc/mysql/conf.d/mysql.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_SUBSTITUTION
到文件底部
$ sudo service mysql restart