今天在测试环境遇到一个问题,本地测试是没有问题,在测试环境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

 

最新文章

  1. 【PRINCE2是什么】PRINCE2认证之七大原则
  2. eclipse中Maven创建WEB项目
  3. Java8-Function使用及Groovy闭包的代码示例
  4. 移动端自动化环境搭建-Robot Framework的安装
  5. 通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母
  6. Clipboard.js – 现代方式实现复制文本到剪贴板
  7. linux命令行安装使用KVM
  8. AngularJS 最常用的功能
  9. @JsonProperty的使用
  10. ios 保存本地数据的方法
  11. [POJ 1742] Coins 【DP】
  12. Mongo汇总问题
  13. odoo中各视图写法
  14. PHP 概览
  15. Left Join B表,只取B表一条记录
  16. 深入理解linux内核v4l2框架之videobuf2【转】
  17. 关于SpringBoot如何返回视图
  18. 在内部局域网内搭建HTTPs
  19. VirtualBox与VMWare网络冲突
  20. Gson、FastJson、json-lib对比与实例

热门文章

  1. web渗透测试之sqlmap拿到数据库信息
  2. pytest「conftest、pytest参数化、重运行、出测试报告」
  3. .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中
  4. [NOI2020]美食家 题解
  5. typepra快捷键
  6. laravel在视图中使用类似于“__PUBLIC__”,“__UPLOADS__”的操作
  7. java最简单的知识之创建一个简单的windows窗口,利用Frame类
  8. 腾讯大牛半年心血高级编程PDF,帮你轻松构建企业级Web应用
  9. Macbook Pro HDMI 无信号解决办法
  10. Mysql业务设计(逻辑设计)