在使用旧版本的mysql进行排序操作时,默认查询的字段是需要全部都在group by 子句中出现的,也就是说如下的sql语句是会报错的:
select * from sys_user group by id;
因为group by 子句,只出现了id字段,所以这条语句只有查询出id字段才不会报错,如:select id from sys_user group by id;
如果需要查询出多余的字段,则需要进行如下的配置:
解决方法:
1、登陆mysql服务器,执行以下两条命令,在global与session级都修改;
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> 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';
2、同时,在my.cnf文件的[mysqld]字段中,指定sql_mode的值:
[mysqld]
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
网友评论