我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
当前回答
感谢@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',''))"
这对我来说很好。
其他回答
如果您正在使用WAMP。左键单击WAMP图标,然后转到MySQL->MySQL设置->sql模式然后选择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
从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并再次登录。
检查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
在我的sql(在Mac OS X上运行的5.7.11版本)上,我可以在mysql shell客户端上使用此功能:
SET
@@GLOBAL.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 5.6文档,sql_mode默认为
MySQL 5.6.5及其后版本中的空白字符串5.6.6中的NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES+
mysql 5.6参考