ONLY_FULL_GROUP_BY是MySQL提供的一個sql_mode,通過這個sql_mode來提供SQL語句GROUP BY合法性的檢查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY語義時。一條select語句,MySQL允許target list中輸出的表達式是除聚集函數或group by column以外的表達式,這個表達式的值可能在經過group by操作後變成undefined,從而導致程序報錯。
進入mysql服務後查看:
select @@global.sql_mode;
下面是完美解決的方案
找到my.conf文件,分別在[mysqld]和[mysql]下面添加這段 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服務,問題解決。
當你再次進入mysql查看的時候,就會看到少了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的時候還會有ONLY_FULL_GROUP_BY,不能夠解決問題。over