رفع مشکل only_full_group_by در MySQL

اگر از کاربران سیستم عامل گنو/لینوکس توزیع اوبونتو باشید، پس از آپگرید کردن به نسخه ی 16.04، سیستم مدیریت دیتابیس مای اس کیو ال به نسخه ی 5.7 ارتقاء خواهد یافت (لازم به ذکر است که نسخه ی مفسر زبان پی اچ پی هم به 7 آپگرید خواهد شد.) در صورتی که در کوئری های خود از دستورات group by استفاده کرده باشید، این احتمال وجود دارد که در نسخه ی جدید مای اس کیو ال با مشکل مواجه شوید. در این ترفند خواهیم دید که به چه شکل می توان 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 = ''


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

0


بهزاد مرادی

از جمله علائقم می‌شه به نشر علم،‌ سرمایه‌گذاری روی نسل آینده، برنامه‌نویسی به خصوص زبان PHP و جامعهٔ اپن‌سورس و همچنین راه‌اندازی استارتاپ و کارآفرینی اشاره کرد و اعتقاد دارم که سکان آکادمی می‌تونه بستری باشه که از اون طریق به علائقم جامهٔ عمل بپوشونم!






از طریق این فرم، می توانید بدون ثبت نام نظر دهید و یا اگر قبلا ثبت نام کرده اید، با ورود ناحیه ی کاربری می توانید علاوه بر ثبت نظر، به مدیریت نظرات خود نیز بپردازید.
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)