MySQL查询出现1055错误的原因及解决方法
当SQL语句查询报1055错误时的解决方法
报错内容如下
报错原因
1.SQL语句中使用了group by
,并且不需要分组的字段没有加上any_value()函数
2.mysql数据库版本是大于5.7,报错信息中最后有一句sql_mode=ONLY_FULL_GROUP_BY,是因为MySQL数据库的配置中sql_mode包含ONLY_FULL_GROUP_BY,导致使用group by
会报错
ONLY_FULL_GROUP_BY 含义:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。在严格模式下,不要让GROUP BY部分中的查询指向未选择的列,否则报错。
解决办法
解决办法共计3种,两种需要改配置,一种不需要
1.不修改任何配置文件,但给不需要分组的字段上加上any_value()函数
SELECT any_value(id),value FROM table_name group by value;
这种方法不需要改配置,但是每条使用group by
的SQL语句都要加上any_value()函数
2.临时更改配置,下次重启电脑或者MySQL服务时会失效
首先在数据库中查询下列代码
select @@global.sql_mode
得到如下结果:
发现里面有ONLY_FULL_GROUP_BY
在查询中继续执行下列代码,其中等号后面的就是刚才查到的代码去掉 ONLY_FULL_GROUP_BY 的部分
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';
这时再重新测试之前报错的SQL语句,应该会可用了
如果不可用,再执行下列两条语句:
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';
就可以了
3.永久更改配置,下次重启电脑或者MySQL服务时不会失效
第一步,先运行下列语句
select @@sql_mode
第二步,打开MySQL的配置文件(window的时my.ini,一般会在安装目录的根目录,linux是my.cnf,一般会放
在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找)
第三步,在配置文件中找到 [mysqld]
,在他下面填入
[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
第四步,停止之后再重启MySQL
停止mysqlsystemctl stop mysql
或者net stop mysql
重启mysqlsystemctl restart mysql
或者net start mysql
window用户可以在服务中重启MySQL:win+R,输入services.msc,点确定找到mysql服务,重启即可解决问题
总结
到此这篇关于MySQL查询出现1055错误的原因及解决方法的文章就介绍到这了,更多相关MySQL查询报错1055内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341