Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3123字,纯文字阅读大概需要5分钟。
内容图文
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
sql_mode查询
同样,在命令行输入如下命令:
select @@GLOBAL.sql_mode;
结果如下:
mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| 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 |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
mysql>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
可以看到,当前数据库sql_mode确实包括了ONLY_FULL_GROUP_BY。开启了这个模式,那么group by和select的字段就会严格匹配。
sql测试
接下来在5.7数据库中做一个简单的测试:
select id, name from t_hotel group by name
- 1.
如上,按照name分组,但是我需要查出来id和name两个字段,结果是抛出异常:
[SQL]select id, name from t_hotel group by name
[Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘hmp-uat.t_hotel.id‘ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
正确的SQL写法应该是这样:
select id, name from t_hotel group by id, name
- 1.
需要查询出来的列表id和name也必须作为分组的字段。
那么,这样在写SQL时限制较多,而且原来的应用需要改动,修改业务逻辑不太现实。最后的办法是,将该选项关闭。
解决办法
重新设置sql_mode,来关闭这个选项。
临时修改
在navicate命令窗口,键入如下命令来修改:
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‘;
- 1.
其实就是去掉了ONLY_FULL_GROUP_BY,在查询sql_mode可以看到设置成功。
但是这个方法如果重启了mysql,设置就会失效,最后的办法是永久关闭。
永久修改
打开/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_SUBSTITUTION
- 1.
然后重启mysql:
service mysql restart
再次执行sql,可以看到可以成功执行,问题解决。
表名大小区分
另外,mysql5.7默认也是开启了表明的大小写区分的,也可以通过修改配置文件来关闭,具体如下:
打开/etc/mysql/my.cnf配置文件,在mysqld节点下添加如下配置:
lower_case_table_names=1
1代表不区分大小写,0代表区分,改完后,重启mysql。
总结
mysql5.7默认开启了很多功能,如果是数据库升级,需要关闭一些选项,例如lower_case_table_names和ONLY_FULL_GROUP_BY,肯定还有其他问题,在测试过程中慢慢发现吧。
转自:https://blog.belonk.com/c/Mysql_error_only_full_group_by.html
Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by
标签:很多 题解 测试环境 sel 窗口 选择 包含 mod 直接
本文系统来源:https://www.cnblogs.com/cshaptx4869/p/12859711.html
内容总结
以上是互联网集市为您收集整理的Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by全部内容,希望文章能够帮你解决Mysql5.7版本sql错误:this is incompatible with sql_mode=only_full_group_by所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。