问题:
在mysql5.7以上的版本中,对于 group by 的这种聚合操作,如果在select 中的列,没有在group by 中出现,那么这个SQL是不合法的,因为列不在group by的从句中,所以对于设置了这个mode的数据库,only_full_group_by:使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行。
使用 SQL 语句可以查询这个配置
SELECT @@sql_mode;
解决方案:
方案1.运行sql,每次重启电脑后都需要重写运行
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
方案2.如果是Linux,就在配置文件(my.cnf)中修改 sql_mode 的配置(在/usr/local/etc/my.cnf路径下)。如果是Windows,就修改配置文件my.ini文件,添加如下:
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
重启mysql:
service mysqld restart
mysql8.0及以上在my.cnf设置sql_mode之后mysql无法启动
原因:MySQL8以后sql_mode以上已经取消了NO_AUTO_CREATE_USER这个关键字。
去掉这个关键字后再启动就好了