mysql - केवल_FULL_GROUP_BY अक्षम करें




mysql-workbench (12)

मैंने गलती से ONLY_FULL_GROUP_BY मोड इस तरह सक्षम किया है:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

मैं इसे कैसे अक्षम कर सकता हूं?


अद्यतन करें:

अपनी वर्तमान mysql सेटिंग्स को रखने और ONLY_FULL_GROUP_BY अक्षम करने के लिए मैं आपके phpmyadmin या जो भी क्लाइंट आप उपयोग कर रहे हैं और टाइप करने का सुझाव ONLY_FULL_GROUP_BY हूं:

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

अगली प्रति परिणाम आपकी my.ini फ़ाइल पर परिणाम।

टकसाल : sudo nano /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf 16 और ऊपर : sudo nano /etc/mysql/my.cnf

ubuntu 14-16 : /etc/mysql/mysql.conf.d/mysqld.cnf

सावधान! copy_me परिणाम में एक लंबा टेक्स्ट हो सकता है जिसे डिफ़ॉल्ट रूप से छंटनी की जा सकती है। सुनिश्चित करें कि आप पूरे पाठ की प्रतिलिपि बनाते हैं!

पुराना उत्तर:

यदि आप स्थायी रूप से त्रुटि को अक्षम करना चाहते हैं " SELECT सूची का अभिव्यक्ति # एन ग्रुप बाय क्लॉज में नहीं है और इसमें गैर-समेकित कॉलम 'db.table.COL' शामिल है जो ग्रुप बाय क्लॉज में कॉलम पर कार्यात्मक रूप से निर्भर नहीं है; यह sql_mode = only_full_group_by के साथ असंगत है "उन चरणों को करें:

  1. sudo nano /etc/mysql/my.cnf
  2. इसे फ़ाइल के अंत में जोड़ें

    [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"
    
  3. sudo service mysql restart को पुनरारंभ sudo service mysql restart लिए पुनरारंभ करें

यह सभी उपयोगकर्ताओं के लिए ONLY_FULL_GROUP_BY अक्षम कर ONLY_FULL_GROUP_BY


@cwhisperer के लिए धन्यवाद। सिम्फनी ऐप में डॉक्टर के साथ मेरा एक ही मुद्दा था। मैंने अभी अपनी config.yml में विकल्प जोड़ा है:

doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            # PDO::MYSQL_ATTR_INIT_COMMAND
            1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

यह मेरे लिए ठीक काम किया।


Phpmyadmin डैशबोर्ड के माध्यम से MySQL कॉन्फ़िगरेशन को बदलने का मेरा समाधान यहां दिया गया है:

ठीक करने के लिए "यह sql_mode = only_full_group_by के साथ असंगत है": ओपन phpmyadmin और goto होम पेज खोलें और 'चर' सबमेनू का चयन करें। एसक्यूएल मोड खोजने के लिए नीचे स्क्रॉल करें। एसक्यूएल मोड संपादित करें और 'ONLY_FULL_GROUP_BY' इसे हटाएं।


आप कॉन्फ़िगरेशन फ़ाइल my.cnf का उपयोग करके इसे अक्षम कर सकते हैं:

$ mysql --verbose --help | grep my.cnf

तो मैकोज़ 10.12 में, यह usr/local/etc/my.cnf । आप यहां sql_mode संपादित कर सकते हैं:

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

पर:

  • उबंटू 14.04
  • MySQL Ver 14.14 Distrib 5.7.16, लिनक्स (x86_64) के लिए EditLine wrapper का उपयोग कर

कर:

$ sudo nano /etc/mysql/conf.d/mysql.cnf

प्रतिलिपि करें और चिपकाएं:

[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

फ़ाइल के नीचे तक

$ sudo service mysql restart

मेरे एसक्यूएल पर (संस्करण 5.7.11 मैक ओएस एक्स पर चल रहा है) यह मेरे लिए mysql खोल क्लाइंट पर काम करता है:

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"

MySQL 5.6 दस्तावेज़ीकरण के अनुसार, sql_mode डिफ़ॉल्ट है

MySQL 5.6.5 और पीछे NO_ENGINE_SUBSTITUTION में रिक्त स्ट्रिंग, 5.6.6 + में STRICT_TRANS_TABLES

mysql 5.6 संदर्भ


मैंने देखा है कि @Eyo Okon Eyo समाधान तब तक काम करता है जब तक MySQL सर्वर पुनरारंभ नहीं होता है, तो डिफ़ॉल्ट सेटिंग्स को पुनर्स्थापित कर दिया जाता है। यहां एक स्थायी समाधान है जो मेरे लिए काम करता है:

विशेष SQL मोड को निकालने के लिए (इस मामले में ONLY_FULL_GROUP_BY ), वर्तमान SQL मोड ढूंढें:

SELECT @@GLOBAL.sql_mode;

परिणाम की प्रतिलिपि बनाएँ और उस से हटाएं जिसे आपको आवश्यकता नहीं है ( ONLY_FULL_GROUP_BY )

उदाहरण के लिए:

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

सेवा मेरे

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

इस फ़ाइल को बनाएं और खोलें:

/etc/mysql/conf.d/disable_strict_mode.cnf

और इसमें अपना नया एसक्यूएल मोड लिखें और अतीत करें:

[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

MySQL पुनरारंभ करें:

sudo service mysql restart

या आप ONLY_FULL_GROUP_BY मान अस्वीकृति को दबाने के लिए ANY_VALUE() का उपयोग कर सकते हैं , आप यहां इसके बारे में अधिक पढ़ सकते हैं


यदि आप WAMP का उपयोग कर रहे हैं। WAMP आइकन पर बायाँ क्लिक करें, फिर MySQL -> MySQL सेटिंग्स -> sql-mode और फिर sql-mode-> उपयोगकर्ता मोड का चयन करें


सावधान रहें

SET sql_mode = '' 

यह वास्तव में सक्षम सभी मोड को वास्तव में साफ़ करता है। यदि आप अन्य सेटिंग्स के साथ गड़बड़ नहीं करना चाहते हैं, तो आप एक करना चाहते हैं

SELECT @@sql_mode 

सबसे पहले, सक्षम मोड की अल्पविराम से अलग सूची प्राप्त करने के लिए, फिर इसे ONLY_FULL_GROUP_BY विकल्प के बिना इस सूची में सेट करें।


MySQL दस्तावेज़ निम्न विधियों को भी निर्दिष्ट करता है:

  • sql-mode="<modes>" को एक विकल्प फ़ाइल में सेट करें जैसे my.cnf (यूनिक्स ऑपरेटिंग सिस्टम) या my.ini (विंडोज़)।
  • कमांड लाइन के माध्यम से सर्वर स्टार्टअप पर SQL मोड सेट करने के लिए, --sql-mode="<modes>" विकल्प का उपयोग करें।

* जहां <modes> अल्पविराम से अलग अलग मोड की एक सूची है।

एसक्यूएल मोड को स्पष्ट रूप से साफ़ करने के लिए, इसे कमांड लाइन पर --sql-mode="" या एक विकल्प फ़ाइल में sql-mode="" का उपयोग करके खाली स्ट्रिंग पर सेट करें।

मैंने sql-mode="" विकल्प को /etc/my.cnf और यह काम किया।

यह SO समाधान यह जानने के तरीकों पर चर्चा करता है कि MySQL द्वारा कौन सी my.cnf फ़ाइल का उपयोग किया जा रहा है।

परिवर्तन करने के बाद MySQL को पुनरारंभ करना न भूलें।


समाधान 1: mysql कंसोल से ONLY_FULL_GROUP_BY निकालें

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

आप here और पढ़ सकते हैं

समाधान 2: phpmyadmin से ONLY_FULL_GROUP_BY निकालें

  • Phpmyadmin खोलें और लोकलहोस्ट का चयन करें
  • मेनू वैरिएबल पर क्लिक करें और एसक्यूएल मोड के लिए नीचे स्क्रॉल करें
  • मानों को बदलने और ONLY_FULL_GROUP_BY को हटाने के लिए संपादन बटन पर क्लिक करें और सहेजें पर क्लिक करें।

    mysql> 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';
    mysql> set session 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> exit;






mysql-workbench