رفع مشکل ONLY_FULL_GROUP_BY در MySQL در گنو/لینوکس

رفع مشکل ONLY_FULL_GROUP_BY در MySQL در گنو/لینوکس

اگر از کاربران سیستم‌عامل گنو/لینوکس توزیع اوبونتو باشید، پس از آپگرید کردن به نسخه‌های جدیدتر، سیستم مدیریت دیتابیس MySQL به نسخهٔ 5.7 یا بالاتر ارتقاء خواهد یافت. حال چنانچه در کوئری‌های خود از دستورات group by استفاده کرده باشید، این احتمال وجود دارد که در نسخهٔ جدید MySQL با مشکل مواجه شوید. در این پست، خواهیم دید که به چه شکل می‌توان ONLY_FULL_GROUP_BY را در تنظیمات sql_mode غیر فعال کرد.

برای غیرفعال کردن دائمی قابلیت ONLY_FULL_GROUP_BY در تنظیمات MySQL، ابتدا وارد پوشهٔ etc/mysql/ شده سپس فایل my.cnf را باز نمایید:


#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

حال با اضافه کردن کدهای مد نظر به شکل زیر به انتهای این فایل، می‌توانیم قابلیت ONLY_FULL_GROUP_BY را غیرفعال سازیم:


#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
# ... other stuff will probably be here
sql_mode = "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 جزو تنظیمات sql_mode در نظر گرفته نشده است. اکنون نیاز است تا سرویس mysql را مجدد ری‌استارت کنیم. برای این منظور، دستور زیر را در ترمینال وارد می‌کنیم:

$ sudo service mysql restart

از این پس، SQL Mode به صورت دائم غیرفعال شده و به راحتی خواهید توانست روی پروژه‌هایی که قبلاً با نسخهٔ MySQL 5.5 کار می‌کردند، به توسعه ادامه دهید. در صورتی هم که بخواهید به صورت موقت قابلیت ONLY_FULL_GROUP_BY را غیرفعال سازید، در phpmyadmin وارد دیتابیس مد نظر شده، روی تب SQL کلیک کرده و اس‌کیو‌ال زیر را اجرا کنید:


SET sql_mode = ''

توجه داشته باشید که در این روش، هر دفعه که سیستم‌عامل بالا می‌آید، کامند فوق را باید اجرا کنید.



بهزاد مرادی