问题现象
在执行MySQL命令进行查询时,提示如下错误:
1055(42000): SELECT list is not in GROUP BY clause and contains nonaggregated column原因与解决方案
该报错主要是因为sql_mode参数被修改导致:
原因一:用户修改sql_mode参数导致GROUP BY的语法不合规
原因二:业务侧驱动程序修改sql_mode参数导致GROUP BY报错
原因:业务侧使用的驱动程序修改了
sql_mode参数值。例如,业务侧使用的ADO.NET驱动程序修改了sql_mode参数值,导致GROUP BY报错。
如上图所示,当执行的INSERT语句需要返回自增列的值时,驱动程序会在执行INSERT语句前,自动修改当前会话上的sql_mode参数值,并且不会在INSERT语句执行完之后将sql_mode恢复为原参数值。如果当前会话被继续使用,会导致后续执行包含GROUP BY的SELECT语句时出现报错。解决方案:如果使用了ADO.NET驱动程序,需要用户在驱动程序执行INSERT语句之后且执行查询之前,在业务侧代码中,增加修改
sql_mode参数的语句(代码如下),将sql_mode参数修改为默认值。SET session sql_mode = default;