执行sql查询时,服务器上报错。sql
错误缘由:在MySQL5.7以后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未经过ONLY_FULL_GROUP_BY语义检查因此报错。数据库
个人查询语句要实现的功能是要筛选出全部单据中最后一次更新的数据,根据单据编码group by,再经过编码和更新时间来order by,本地就没问题,服务器上直接报错。服务器
缘由是:编码
执行此条语句:select @@sql_mode;spa
发现本地是空的,而服务器上显示:class
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配置
发现这些都是数据库自己的验证功能。select
而ONLY_FULL_GROUP_BY规定:出如今select中的全部字段都要出如今group by后面。程序
修改方式:数据
1.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 ';
2.由于服务器通常限制都会比较严格,若是dba不一样意修改此处的全局配置的话,就只能在程序中修改成会话级别的配置了。
set SESSION sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ';
而后再执行查询语句。