我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
我意外启用了ONLY_FUL_GROUP_BY模式,如下所示:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
如何禁用它?
当前回答
从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上有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
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-提示集变量
对于使用cPanel/WHM运行VPS/Server的用户,可以执行以下操作永久禁用ONLY_FUL_GROUP_BY
您需要root访问权限(在VPS或专用服务器上)
输入WHM作为root用户并运行phpMyAdmin单击Variables,查找sql_mode,单击Edit,然后复制文本框中的整行
例如,复制以下内容:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
通过SFTP-SSH(root)连接到服务器,并下载文件/etc/my.cnf使用本地PC上的文本编辑器my.cnf文件打开,并将在步骤(2)中复制的整行粘贴到其中(在[mysqld]部分下),但删除ONLY_FUL_GROUP_BY,
例如粘贴此:
# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
保存my.cnf文件并将其上载回/etc/输入WHM并转到“WHM>重新启动服务>SQL Server(MySQL)”并重新启动服务
解决方案1:从mysql控制台中删除ONLY_FUL_GROUP_BY
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
你可以在这里阅读更多
解决方案2:从phpmyadmin中删除ONLY_FUL_GROUP_BY
打开phpmyadmin并选择localhost单击菜单变量并向下滚动以进入sql模式单击编辑按钮更改值并删除ONLY_FUL_GROUP_BY并单击保存。
使用MySQL 5.7.28版检查SELECT@@sql_mode;并使用更新
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'