Mysql的ONLY_FULL_GROUP_BY
今天在测试环境遇到一个问题,本地测试是没有问题,在测试环境sql报错了: nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'dt.vDateTime' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by;
刚开始觉得很奇怪,本地测试的时候没有问题,为什么在测试环境就sql报错了,后来想到leader说过的sql严格模式。百度了一下报错信息,在这里纪录一下。
ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查,在MySQL的sql_mode没有ONLY_FULL_GROUP_BY语义时。一条select语句,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的表达式。ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在ONLY_FULL_GROUP_BY模式下,target list中的值要么是来自于聚集函数的结果,要么是来自于group by list中的表达式的值
mysql> select id+1 as a from tt group by a order by id+1;
+------+
| a |
+------+
| 2 |
| 3 |
+------+
2 rows in set (0.00 sec)
mysql允许target list中对于非聚集函数的alias column被group by、having condition以及order by语句引用(version 5.7中允许having condition引用alias column,version 5.6不支持having condition引用alias column),从上面两条语句可以看出,group by和order by中引用了alias column。
我的sql报错是因为我的order by并没有出现在group by list中,而且也不是聚合修饰的;
select a1 from table group by a1 order by a2
纪录一下网上找到的一些解决方案:
1.命令行输入:
set @@GLOBAL.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';
默认关掉ONLY_FULL_GROUP_BY!
这样只是session级别的,在mysql重启后,还是会有ONLY_FULL_GROUP_BY;
2.改my.ini 配置(如果你们mysql 没有这个文件,就把my-default.ini 改成my.ini,我这个版本就是没有my.ini配置问题)
在 [mysqld]和[mysql]下添加
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE
最新文章
- 【PRINCE2是什么】PRINCE2认证之七大原则
- eclipse中Maven创建WEB项目
- Java8-Function使用及Groovy闭包的代码示例
- 移动端自动化环境搭建-Robot Framework的安装
- 通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母
- Clipboard.js – 现代方式实现复制文本到剪贴板
- linux命令行安装使用KVM
- AngularJS 最常用的功能
- @JsonProperty的使用
- ios 保存本地数据的方法
- [POJ 1742] Coins 【DP】
- Mongo汇总问题
- odoo中各视图写法
- PHP 概览
- Left Join B表,只取B表一条记录
- 深入理解linux内核v4l2框架之videobuf2【转】
- 关于SpringBoot如何返回视图
- 在内部局域网内搭建HTTPs
- VirtualBox与VMWare网络冲突
- Gson、FastJson、json-lib对比与实例
热门文章
- web渗透测试之sqlmap拿到数据库信息
- pytest「conftest、pytest参数化、重运行、出测试报告」
- .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中
- [NOI2020]美食家 题解
- typepra快捷键
- laravel在视图中使用类似于“__PUBLIC__”,“__UPLOADS__”的操作
- java最简单的知识之创建一个简单的windows窗口,利用Frame类
- 腾讯大牛半年心血高级编程PDF,帮你轻松构建企业级Web应用
- Macbook Pro HDMI 无信号解决办法
- Mysql业务设计(逻辑设计)