آموزش رفع خطای ONLY_FULL_GROUP_BY در MySQL
خطای ONLY_FULL_GROUP_BY در MySQL معمولاً زمانی رخ میدهد که حالت SQL Mode از قوانین سختگیرانهای برای استفاده از عبارت GROUP BY پیروی میکند. این حالت باعث میشود تا فقط ستونهایی که در GROUP BY قرار دارند یا در توابع تجمعی (SUM, AVG, COUNT و غیره) استفاده شدهاند، برای دستور SELECT مجاز باشند.
دلیل مشکل ONLY_FULL_GROUP_BY در MySQL، نقصی در گروهبندی دیتابیس MySQL می باشد که با انجام تنظیمات ساده قابل حل است. در ادامه روش های رفع این مشکل بررسی خواهد شد.
روش های رفع خطای ONLY_FULL_GROUP_BY در MySQL
برای رفع این خطا، چند راه حل کاربردی وجود دارد که بسته به شرایط پروژه میتوانید از آنها استفاده نمایید.
در ادامه، مهمترین روشها برای رفع مشکل ONLY_FULL_GROUP_BY در MySQL معرفی شدهاند.
1- استفاده از عبارت GROUP BY:
اولین روش برای رفع مشکل ONLY_FULL_GROUP_BY، می تواند اصلاح کوئری باشد. برای این کار، باید تمام ستونهای مورد نیاز برای گروهبندی را در کوئری خود مشخص نمایید.
2- غیرفعال کردن ONLY_FULL_GROUP_BY
این روش را می توانید به دو صورت موقت و دائمی انجام دهید:
تغییر موقت:
اگر قصد دارید این حالت را برای یک سرور ویرایش کنید و بعد از ریستارت شدن MySQL، این تغییرات از بین بروند، از دستور زیر استفاده کنید:
SET SESSION sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');
یا برای تغییر کلی (Global):
SET GLOBAL sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');
توجه داشته باشید تغییر Global فقط تا زمانی موثر خواهد بود که MySQL ریستارت نشود. همچنین این مورد با ورود به phpMyAdmin و تب Variables، قابل ویرایش است:

تغییر دائمی (ویرایش فایل تنظیمات):
اگر میخواهید تغییرات دائمی باشند، لازم است تا فایل my.cnf (در لینوکس) یا my.ini (در ویندوز) را ویرایش کنید.
در قسمت [mysqld]، مقدار زیر را وارد کنید:
[mysqld]
sql_mode="STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
پس از اعمال تغییرات MySQL را ریاستارت نمایید.