赞
踩
mysql版本更新(升级)之后使用
group
之后,报错:SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘test.order.user_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql 5.7
以及5.7 以上
的版本中,其原因是mysql
的默认配置中,sql_mode="ONLY_FULL_GROUP_BY"
这个配置严格执行了 SQL92标准
,所以很高网站维护人员在升级mysql
版本时,都会修改 sql_mode
的配置,使其能兼容。sql
层面来说,输出的结果思做target list
,就是 select
后面跟着的字段,还有一个地方是 group by column
,就是 group
后面跟着的字段,由于开启了 ONLY_FULL_GROUP_BY
的设置,如果没有字段在 target list
以及 group by
字段中同时出现,那么 sql
就认为此条语句是不合法的,就会抛出错误。select @@GLOBAL.sql_mode;
此种方式的修改,在mysql 重启后就会失效。
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;
mysql
配置文件,通过手动添加sql_mode
的方式强制指定不需要ONLY_FULL_GROUP_BY
属性,
/etc/my.cnf
;windows 在数据库安装目录下的 my.ini
mysqld
下面添加代码:sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启 mysql
select a,b from table group by a,b,c; (正确)
select a,b,c from table group by a,b; (错误)
||
视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似this is incompatible with sql_mode=only_full_group_by
查询,查看更多。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。