MySQL错误SELECT list is not in GROUP BY clause and contains nonaggregated column解决”

MySQL报错如下:

Expression #12 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘shaogang.role_menu.role_menu_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

相同的数据库,相同的工程,在本地就好使,但是传到服务器就不行,一开始以为是表和工程的问题,各种删,重建,结果发现不是!
转载博客,后来在这篇博客上发现了解决办法,实测方法1不好用,用方法2成功解决,完成部署!
说好像是因为MySQL版本的问题,可是我的MySQL本地版本和服务器版本都是MySQL5.7,然而不知道为啥不好使!
解决办法:

  1. 用vim打开mysql.cnf文件

sudo vim /etc/mysql/conf.d/mysql.cnf

  1. 滚动到文件底部赋值如下内容,然后保存并退出输入模式

[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

  1. 重启mysql服务器

sudo service mysql restart

总结:
遇到bug时,千万不要自以为是的去解决,一定要先仔细查看bug是什么,然后去网上找对应的有没有解决办法!

后记

对于MySQL 5.7版本的这个问题的处理,网上还有另外一种办法:

打开navcat,
用sql查询:
select @@global.sql_mode
查询出来的值为:
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
去掉ONLY_FULL_GROUP_BY,重新设置值。
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’;

但亲测该方法并不实用,因为这种修改只是暂时性的,一旦重启服务器就会变回原来的样子,即
select @@global.sql_mode查询出来的结果仍然是:
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

ONLY_FULL_GROUP_BY值仍然存在!

你可能感兴趣的:(JavaEE,web开发)