ONLY_FULL_GROUP_BY अक्षम करें


614

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

SET sql_mode = 'ONLY_FULL_GROUP_BY';

मैं इसे कैसे निष्क्रिय करूं?


38
क्या आपने कोशिश की है SET sql_mode = ''?
ट्रिप कैनेटिक्स

4
आप एक ऐसे मोड को क्यों निष्क्रिय करना चाहेंगे जो MySQL को SQL मानकों का बेहतर अनुपालन करता है, और एक, भी, जो आपको अपने प्रश्नों को लिखने में अधिक सावधान रहना सिखाता है?
एंड्री एम

34
5.7 मैसूर के रूप में, आप वैकल्पिक रूप से, columnअपनी क्वेरी को वापस लेने के लिए Any_VALUE ( ) फ़ंक्शन का उपयोग कर सकते हैं । डॉक यहां
Qoheleth-Tech

3
@AndriyM मुझे जल्द ही इसका उपयोग करने की आवश्यकता होगी क्योंकि मैं पुराने अनुप्रयोगों के एक पूरे लोड को एक नए सर्वर में पोर्ट कर रहा हूं और उन्हें काम करने की आवश्यकता है, चाहे मेरे पास स्रोत हो या न हो।
Jaydee

8
@AndriyM क्योंकि अगर मैं एक अद्वितीय सूचकांक कॉलम द्वारा समूहीकरण कर रहा हूं, तो मैं पहले से जानता हूं कि हर पंक्ति अद्वितीय होगी - प्रत्येक के लिए कमांड द्वारा एक अलग समूह जोड़ना। एक। स्तंभ। तालिका में एक शाही दर्द है।
बेनुबर्ड

जवाबों:


1163

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

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

आप यहाँ और अधिक पढ़ सकते हैं

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

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

12
यह समाधान mySQL 5.7.11 पर ठीक काम करता है और इसे स्वीकार किया जाना चाहिए। स्वीकृत उत्तर mySQL के नए संस्करण पर काम नहीं करता है
Any_ph

4
बस सुनिश्चित किया गया। इससे कोई फर्क नहीं पड़ता REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''), MySQL वैसे भी रिकॉर्ड से अवांछित कॉमा को हटा देता है। ओपी का जवाब सही है।
नवाफाल

40
यह काम करता है, लेकिन जब मैं mysql सर्वर को पुनरारंभ करता हूं, तो डिफ़ॉल्ट को पुनर्स्थापित किया जाता है ... क्यों? क्या कोई लगातार समाधान है? धन्यवाद!
विंसेंट पैज़ेलर

52
मेरे प्रश्न (लगातार समाधान) का उत्तर देने के लिए: आपको sql_mode का वर्णन my.cnf फ़ाइल (उदाहरण के लिए /etc/my.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"
विन्सेंट Pazeller

21
GLOBALमेरे लिए काम नहीं किया, लेकिन SESSIONकिया। SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
आंद्रे

371

अपडेट करें:

यहाँ छवि विवरण दर्ज करें

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

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

अगली कॉपी आपकी my.iniफ़ाइल पर

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

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

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

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


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

यदि आप स्थायी रूप से त्रुटि को अक्षम करना चाहते हैं " चयन सूची का अभिव्यक्ति #N समूह BY खंड में नहीं है और इसमें गैर-पृथक स्तंभ 'db.table.COL' शामिल है, जो समूह BY खंड में स्तंभों पर कार्यात्मक रूप से निर्भर नहीं है; यह 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 MySQL को पुनरारंभ करने के लिए

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


2
मेरे लिए, एक ही लाइन पर mysqld टैग सेट करने से काम नहीं चला, लेकिन क्या लाइन ब्रेक के साथ काम किया गया है :) धन्यवाद
धुंधला

23
/etc/mysql/mysql.conf.d/mysqld.cnf
उबंटू के

5
इसने Ubuntu 16.04 (14 से 16 अपग्रेड वाइप्स) के लिए काम किया। /Etc/mysql/my.cnf सही फ़ाइल है। Knb द्वारा उल्लिखित फ़ाइल इस my.cnf फ़ाइल के भीतर शामिल है, 16.04 में कम से कम (कॉन्फ़िगरेशन अब कई फ़ाइलों में विभाजित है)।
jwinn

2
"SELECT @@ sql_mode" का उपयोग करें यह देखने के लिए कि परिवर्तन करने से पहले वर्तमान में कौन से मोड हैं।
Zbigniew Ledwoń

1
वास्तविक स्थान जहां आप देखेंगे [mysqld]कि इस फ़ाइल में नहीं हो सकता है, यह एक निर्देशिका में शामिल हो सकता है। पहले इस कमांड का उपयोग करें: grep -R "\[mysqld\]" *यह देखने के लिए कि क्या है - और उस मामले के लिए प्रयास करेंgrep -R "\bsql_mode\b" *
ओलिवर विलियम्स

203

उपयोग करने में सावधानी बरतें

SET sql_mode = '' 

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

SELECT @@sql_mode 

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


ऐसा करने का सबसे अच्छा तरीका क्या है then SET it to this list without the ONLY_FULL_GROUP_BY option.:?
केविन मेरेडिथ

4
@KevinMeredith डॉक्स की मेरी रीडिंग एक समय में एक मोड को चालू / बंद करने का कोई तरीका नहीं है - सभी उदाहरणों के लिए आपको अपने द्वारा चाहने वालों की अल्पविराम से अलग की गई सूची की आपूर्ति करने की आवश्यकता होती है - उदाहरण के लिएSET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
विलियम टरेल

1
यदि यह एक स्थायी परिवर्तन है, तो my.cnf को इस तरह से एक लाइन के साथ संपादित करें: sql_mode=<comma-separated-list>और फिर अपना सर्वर बंद करें और शुरू करें। के स्थान के लिए अपने ऑपरेटिंग सिस्टम के लिए डॉक्स का पालन करें, और संपादित करने के लिए सबसे अच्छा तरीका, my.cnf।
ब्लैकवुड

107

इसे आजमाइए:

SET sql_mode = ''

सामुदायिक नोट: जैसा कि नीचे दिए गए उत्तरों में बताया गया है, यह वास्तव में वर्तमान में सक्षम सभी SQL मोड को साफ करता है । यह जरूरी नहीं है कि आप क्या चाहते हैं।


11
वाह, ''= 'full group by is disabled'? MySQL कुछ सुंदर गूंगा काम करता है, लेकिन एक वहाँ है।
हारून बर्ट्रेंड

38
मुझे लगता है कि यह मूल रूप से किसी भी sql मोड को निष्क्रिय करता है;
ज़विबार

यह मेरे लिए काम नहीं किया। मैं देखता हूं 0 rows affectedऔर मेरी क्वेरी अभी भी काम नहीं करती है:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
मैक्स हेइबर

10
इस उत्तर को आज़माने से पहले, निश्चित रूप से Machavity की चेतावनी को देखें और यदि आप परिवर्तन जारी रखना चाहते हैं, तो कमांड में उपयोगglobal करना सुनिश्चित करें ।
thomas88wp

6
हर बार जब मैं कुछ समय के बाद MySql में वापस आता हूं, तो मैं हमेशा इस समस्या से मिलता हूं, जो मुझे परेशान करती है, क्योंकि मैं हमेशा यह भूल जाता हूं कि समस्या क्या है :) भावना सिर्फ निराशाजनक है, जब आपको लगता है कि यह काम कर रहा था और अब यह नहीं है संस्करण परिवर्तन के कारण।
X-HuMan

106
    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;

@ RémiBreton: उर mysql संस्करण क्या है?
वेयुआन

6
यह वास्तव में काम करता है। लेकिन मैं अपने सिस्टम को पुनः आरंभ करने के बाद (ubuntu 16.04), sql_modeपिछले मूल्य पर रोलबैक। अब मैं क्या कर सकता हूँ?
पक्तंग्यू

भयानक, मेरे लिए काम किया, बस मुझे इसे स्थायी रूप से बदलने की आवश्यकता है
फर्नांडो टोरेस

73

मौजूदा हटाने के बिना sql_mode में केवल एक मोड जोड़ना:

SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));

दूसरों को हटाए बिना sql_mode से केवल एक विशिष्ट मोड निकालना:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));

आपके मामले में, यदि आप केवल ONLY_FULL_GROUP_BYमोड को हटाना चाहते हैं , तो नीचे दिए गए कमांड का उपयोग करें:

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

संदर्भ: http://johnemb.blogspot.com/2014/09/adding-or-removing-indateral-sql-modes.html


यह एक महान जवाब है! धन्यवाद।
वेदी

यह वैश्विक है या वर्तमान कनेक्शन पर? बहुत बढ़िया जवाब!
ओलिवर एम ग्रेच

48

@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',''))"

इसने मेरे लिए ठीक काम किया।


1
और अगर आपको "SET NAMES 'utf8', sql_mode = (SELECT REPLACE (@@ sql_mode, 'ONLY_FOL_GROUP_BY', '')") का उपयोग करके SET NAMES 'utf8' के साथ संयोजन करने की आवश्यकता है; यदि "SET NAMES 'utf8' के बजाय दो प्रश्नों का उपयोग किया जाता है, तो SET sql_mod ..." यह "सामान्य त्रुटि: 2014 फेंक देगा" क्वेरी को निष्पादित नहीं कर सकता है जबकि अन्य असंबद्ध प्रश्न सक्रिय हैं। "
वेंजी कुनेव

@VentzyKunev कृपया इस सलाह का पालन न करें और SET NAMESइस पद्धति का उपयोग न करें, ज्यादातर मामलों में इसे पहले से सेटिफ़िकेशन की आवश्यकता नहीं है इसे doctrine.dbal.charset cofnig के माध्यम से सेट करें: symfony.com/doc/reistent/reference/configuration/doctrine.html , और इसे पीडीओ डीएनएस के माध्यम से ठीक से करता है, सेट नाम ऐसा करने का पुराना तरीका है, जिसका उपयोग PHP संस्करण के लिए 5.3 से अधिक नहीं होना चाहिए
LPodolski

39

पर:

  • उबंटू 14.04
  • Mysql Ver 14.14 डिस्ट्रिब्यूट 5.7.16, लिनक्स के लिए (x86_64) एडिटलाइन रैपर का उपयोग करते हुए

करना:

$ 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

क्या mysql.cnf को mysql अपडेट द्वारा अधिलेखित नहीं किया जाएगा?
cwhisperer 12

1
@cwhisperer /etc/mysql/mysql.cnf2 कॉन्फिग फोल्डर !includedir /etc/mysql/conf.d/+ की ओर इशारा करता है !includedir /etc/mysql/mysql.conf.d/। उसी के लिए जाता है /etc/mysql/my.cnf। इसलिए मुझे लगता है कि कॉन्फ़िगरेशन फ़ाइलों को अद्यतन पर ओवरराइड नहीं किया गया है। आप यहाँ और अधिक पढ़ सकते हैंhttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
Jadeye

मैंने यह कोशिश की और यह Ubuntu 18.04.2 बायोनिक पर काम नहीं किया। मैंने इसका अनुसरण किया और इसने काम किया: साइट पॉइंट.com/… - शायद रिक्त स्थान और उद्धरण के साथ इस प्रारूप का उपयोग करना महत्वपूर्ण है: sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"शायद इसके /etc/mysql/mysql.conf.d/mysqld_mode.cnfबजाय एक नई फ़ाइल बनाना महत्वपूर्ण है
rubo77

Mysql सर्वर रीस्टार्ट होने के बाद भी यह काम करता है
अक्षय खले

36

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

विशेष SQL मोड को निकालने के लिए (इस मामले में केवल ON__ULL_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

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

[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

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


3
अप के लिएANY_VALUE()
सिथू

25

MySQL प्रलेखन भी निम्न विधियों में निर्दिष्ट करता है:

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

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

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

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

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

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


1
यह मेरे लिए सही उत्तर है 'Ver 14.14 Distrib 5.7.10, osx10.11 के लिए (x86_64) `
Sinux

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। अन्य जवाब एक स्थायी समाधान प्रदान नहीं करते हैं।
sijpkes

@ br3nt मैं कैसे पता लगाऊं कि वर्तमान मोड का क्या उपयोग किया जाता है ताकि मैं केवल अवांछित मोड को हटा सकूं, यदि मैं सभी मोड को अनसेट नहीं करना चाहता हूं?
सिमगिनेर

1
कोशिशSELECT @@GLOBAL.sql_mode;
br3nt

19

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

इस छवि की जाँच करें


क्या कोई कारण है कि मेरे WAMP इंस्टॉल में MySQL सेटिंग्स नहीं हैं? सेवा प्रशासन और MySQL कंसोल है, लेकिन कोई सेटिंग नहीं?
क्रेग

यही वह है जिसकी तलाश में मैं हूं! एक सरल WAMP सर्वर समाधान प्रदान करने के लिए धन्यवाद! इस ट्यूटोरियल में # अलगाव की कोशिश करते समय मुझे इसकी आवश्यकता थी: youtu.be/HXV3zeQKqGY?t=9718
Eric Hepperle - CodeSlayer2010

12

मेरे एसक्यूएल (संस्करण 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 में खाली स्ट्रिंग और 5.6.6 + में NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES

mysql 5.6 संदर्भ


अन्य उत्तर sql_mode := ''संभव होने का दावा करते हैं। आप असहमत क्यों हैं?
हरमन डोपेस 14

आपके स्ट्रिंग में वे सभी विकल्प कहाँ से आते हैं? इसके पीछे क्या तर्क है?
हरमन डोपेस

MySQL 5.6 दस्तावेज़ीकरण के अनुसार, sql_mode डिफ़ॉल्ट है MySQL 5.6.5 में रिक्त स्ट्रिंग और पीछे NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES 5.6.6 dev.mysql.com/doc-refman/5.6/en/…
साल्वातोर नापोली

धन्यवाद ने मेरे लिए उबंटू 16.04 - mysql Ver 14.14 डिस्ट्रीब्यूट 5.7.18, लिनक्स के लिए (x86_64) एडिटलाइन रैपर का उपयोग करके काम किया
पॉल प्रीबिश

12

MySQL 5.7 और Ubuntu 16.04 पर, mysql.cnf फ़ाइल संपादित करें।

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

निम्नलिखित की तरह sql_mode को शामिल करें और फ़ाइल को सहेजें।

[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

निरीक्षण करें कि, मेरे मामले में, मैंने STRICT_TRANS_TABLES और ONLY_FULL_GROUP_BY मोड को हटा दिया है।

ऐसा करने से, यह मोड कॉन्फ़िगरेशन को स्थायी रूप से बचाएगा। यदि आप MySQL के माध्यम से @@ sql_mode को अपडेट करते हैं, तो यह अलग है, क्योंकि यह मशीन / सेवा पुनरारंभ पर रीसेट हो जाएगा।

उसके बाद, संशोधित कॉन्फ़िगरेशन कार्रवाई में, mysql सेवा को पुनरारंभ करें:

$ sudo service mysql restart

Mysql तक पहुँचने का प्रयास करें:

$ mysql -u user_name -p

यदि आप MySQL कंसोल को लॉगिन और एक्सेस करने में सक्षम हैं, तो यह ठीक है। महान!

लेकिन , अगर मेरे जैसे, आप त्रुटि का सामना "अज्ञात चर sql_mode" जो इंगित करता है कि, sql_mode लिए एक विकल्प है mysqld , तुम वापस, फिर से जाने के लिए संपादित फ़ाइल mysql.cnf और परिवर्तन करना होगा [mysql]करने के लिए [mysqld]। MySQL सेवा को पुनरारंभ करें और MySQL कंसोल पर लॉगिन करने के लिए एक अंतिम परीक्षण करें। यह रहा!


1
मैं @ अलेक्जेंड्रे-रिबेरो के लिए धन्यवाद, सत्र पर इसे स्थापित करने की तुलना में उपरोक्त दृष्टिकोण की जोरदार सिफारिश करूंगा। उन लोगों के लिए जिनके पास Ubuntu 16.04 और mysql 5.7.x है, फ़ाइल को बेहतर ढंग से संपादित करें और [mysqld] समूह के तहत ini निर्देशक sql_mode = <मोड> में प्रवेश करें , जैसा कि [mysql] के खिलाफ घोषित किया गया है , मेरे अनुभव के अनुसार काम नहीं करता है।
कोडरियर

मेरे पास MySQL 5.7.22 है। यह अजीब है, लेकिन मुझे इसके लिए STRICT_TRANS_TABLES और ONLY_FULL_GROUP_BY दोनों को mylnf में sql_mode घोषणा से हटाना था , जैसा कि ऊपर दिखाया गया है, इस काम के लिए। वास्तव में, मैं केवल ONLY_FULL_GROUP_BY मोड को निकालना चाहता हूं। यदि मैं "ग्लोबल / सेशन sql_mode = सेट करता हूं" ... तो मैं बिना काम के इसके लिए केवल STRICT_TRANS_TABLES को हटाए बिना ONLY_FULL_GROUP_BY निकाल सकता हूं। लेकिन चूंकि यह पुनः आरंभ नहीं होता है, इसलिए यह मेरे लिए बहुत उपयोगी नहीं है।
RayCh

12

यह वही है जो मैंने मैसकेल कार्यक्षेत्र पर तय करने के लिए किया था:

इससे पहले कि मैं नीचे दिए गए आदेश के साथ वर्तमान मूल्य मिला

SELECT @@sql_mode 

बाद में मैंने ONLY_FULL_GROUP_BY कुंजी को सूची से हटा दिया और मैंने नीचे का आदेश चिपकाया

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

10

Mac OS Mojave (10.14) ओपन टर्मिनल के लिए

$ sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ sudo nano my.cnf

निम्नलिखित पेस्ट करें:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

सहेजें और बाहर निकलें नैनो को Shortkeys: Ctrl+xऔर yऔरEnter

नोट: आपकोmysql-5.7.24-macos10.14-x86_64इन आदेशों मेंअपडेट करने की आवश्यकता हो सकती है, बस सही फ़ोल्डर नाम की जांच करें जो आपको मिला है/usr/local/

आशा है कि यह किसी की मदद करेगा!


10

मोड जोड़ें या निकालें sql_mode

MySQL 5.7.9 या बाद का

किसी मोड को जोड़ने या हटाने के लिए sql_mode, आप उपयोग कर सकते हैं list_addऔर list_dropकार्य कर सकते हैं ।

वर्तमान से मोड हटाने के लिए SESSION.sql_mode, आप निम्न में से किसी एक का उपयोग कर सकते हैं:

SET SESSION sql_mode = sys.list_drop(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY');
SET sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');

GLOBAL.sql_modeउस से एक मोड को हटाने के लिए चालू रनटाइम ऑपरेशन के लिए बनी रहती है , जब तक कि सेवा को फिर से शुरू नहीं किया जाता है ।

SET GLOBAL sql_mode = sys.list_drop(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY');

MySQL 5.7.8 या पूर्व

चूंकि sql_modeमान मोड का एक CSV स्ट्रिंग है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता होगी कि स्ट्रिंग में अवशिष्ट अल्पविराम नहीं होते हैं, जिन्हें उपयोग करके पूरा किया जा सकता है TRIM(BOTH ',' FROM ...)

से एक विधा को निकालने के लिए sql_modeचर, आप उपयोग करना चाहते हैं REPLACE()के साथ TRIM()सुनिश्चित करने के लिए किसी भी अवशिष्ट अल्पविराम के निकाल दिए जाते हैं।

SET SESSION sql_mode = TRIM(BOTH ',' FROM REPLACE(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));

sql_modeचर में एक मोड जोड़ने के लिए , आप उपयोग करना चाहते हैं CONCAT_WS(',', ...), यह सुनिश्चित करने के लिए कि वर्तमान मोड के साथ एक अल्पविराम जोड़ा जाता है और TRIM()यह सुनिश्चित करने के लिए कि कोई अवशिष्ट अल्पविराम हटा दिया जाता है।

SET SESSION sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@SESSION.sql_mode));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@GLOBAL.sql_mode));

नोट: परिवर्तनशील परिवर्तन का प्रचार नहींGLOBAL करता हैSESSION तब तक , जब तक कि एक नया कनेक्शन स्थापित न हो जाए।

GLOBALजब तक चल सेवा पुन: प्रारंभ होने चर बना रहेगा।

SESSIONचर, वर्तमान कनेक्शन के लिए बना रहेगा जब तक कनेक्शन बंद कर दिया है और एक नया कनेक्शन स्थापित है।


को लौटना GLOBAL.sql_mode

चूंकि संशोधक के SET sql_mode = 'ONLY_FULL_GROUP_BY';बिना निष्पादित किया गया था GLOBAL, इसलिए परिवर्तन ने केवल वर्तमान SESSIONराज्य मूल्य को प्रभावित किया , जो भी संबंधित है @@sql_mode। इसे निकालने के लिए और सर्वर पुनरारंभ मूल्य पर वैश्विक डिफ़ॉल्ट पर वापस जाने के लिए , आप से मान का उपयोग करना चाहेंगे @@GLOBAL.sql_mode[वैसा]

वर्तमान SESSIONमूल्य केवल वर्तमान कनेक्शन के लिए मान्य है। सर्वर पर पुन: कनेक्ट करने से मान वापस मान पर आ जाएगा GLOBAL

वर्तमान सत्र स्थिति को वर्तमान वैश्विक मान पर वापस लाने के लिए, आप निम्न में से किसी एक का उपयोग कर सकते हैं:

SET SESSION sql_mode = @@GLOBAL.sql_mode;
SET @@sql_mode = @@GLOBAL.sql_mode;
SET sql_mode = @@GLOBAL.sql_mode;

के SESSION.sql_modeलिए मूल्य बदलेंONLY_FULL_GROUP_BY

SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+--------------------+----------------------------------------------+
| @@sql_mode         | @@GLOBAL.sql_mode                            |
+--------------------+----------------------------------------------+
| ONLY_FULL_GROUP_BY | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+--------------------+----------------------------------------------+

वापस लाएं SESSION.sql_modeके लिए मूल्य GLOBAL.sql_modeमूल्य

SET sql_mode = @@GLOBAL.sql_mode;
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+----------------------------------------------+----------------------------------------------+
| @@sql_mode                                   | @@GLOBAL.sql_mode                            |
+----------------------------------------------+----------------------------------------------+
| NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------+----------------------------------------------+

सर्वर स्थायी रूप से पुनरारंभ करें sql_mode

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

समर्थित और डिफ़ॉल्ट मोड निर्धारित करने के लिए कृपया MySQL का अपना संस्करण देखें ।

[mysqld]

sql-mode="NO_ENGINE_SUBSTITUTION" #default <= 5.7.4

डिफ़ॉल्ट sql_modeमान

चूंकि MySQL प्रलेखन प्रति-संस्करण मान हटा दिए गए हैं, इसलिए मैंने उन्हें आपके संदर्भ के लिए यहां जोड़ा है।

MySQL> = 8.0.11 8.0.5 - 8.0.10 छोड़ दिया

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION

MySQL> = 5.7.8, <= 8.0.4

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

MySQL 5.7.7

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

MySQL> = 5.7.5, <= 5.7.6

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION

MySQL> = 5.6.6, <= 5.7.4

NO_ENGINE_SUBSTITUTION

MySQL <= 5.6.5

''

8

यदि आप MySQL 8.0.11 का उपयोग कर रहे हैं, तो आपको 'NO_AUTO_CREATE_USER' को sql-mode से हटाने की आवश्यकता है।

फ़ाइल /etc/mysql/my.cnfऔर [mysqld] हैडर में निम्नलिखित पंक्ति जोड़ें

[mysqld]

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

अब तक यह जवाब 8.0.13 के लिए काम करता है
tomexsans

7

मैं सिद्धांत का उपयोग कर रहा हूँ और मैंने अपने सिद्धांत में ड्राइवर जोड़े हैं। local.php:

return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => array(
                'host' => 'localhost',
                'port' => '3306',
                'user' => 'myusr',
                'password' => 'mypwd',
                'dbname' => 'mydb',
                'driverOptions' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
                ),
            ),
        ),
    ),
));

Phpmyadmin में उपयोगकर्ता को विशेषाधिकारों में सक्रिय सुपरर की आवश्यकता होती है।


3
Doctrine को कॉन्फ़िगर करने के लिए yaml संकेतन का उपयोग करना (जैसा कि सिम्फनी में किया गया है) आपको निरंतर "PDO :: MYSQL_ATTR_INIT_COMMAND" के बजाय "1002" का उपयोग करने की आवश्यकता है, लेकिन फिर भी यह वही है जो मैं कुछ हफ्तों पहले देख रहा था और नहीं पा सका। बाहर। आपके समाधान के लिए धन्यवाद! मेरे लिए काम किया।
अरविद

5

जिनके लिए cPanel / WHM के साथ VPS / Server चल रहा है , आप ONLY_FULL_GROUP_BY को स्थायी रूप से अक्षम करने के लिए निम्न कार्य कर सकते हैं

आपको रूट एक्सेस की आवश्यकता है (या तो VPS या समर्पित सर्वर पर)

  1. WHM को रूट के रूप में दर्ज करें और phpMyAdmin चलाएं

  2. वेरिएबल्स पर क्लिक करें, देखें sql_mode, 'एडिट' पर क्लिक करें और उस टेक्स्टबॉक्स के अंदर की पूरी लाइन कॉपी करें

इसे कॉपी करें:

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
  1. SFTP - SSH (रूट) के माध्यम से आप से कनेक्ट करें और फ़ाइल डाउनलोड करें /etc/my.cnf

  2. my.cnfअपने स्थानीय पीसी पर एक टेक्स्ट एडिटर फ़ाइल के साथ खोलें और इसमें पेस्ट करें ( [mysqld]अनुभाग के तहत ) पूरी लाइन जिसे आपने चरण (2) में कॉपी किया था, लेकिन हटा देंONLY_FULL_GROUP_BY,

जैसे पेस्ट करें:

# disabling ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  1. my.cnfफ़ाइल को सहेजें और इसे वापस अपलोड करें/etc/

  2. WHM दर्ज करें और "WHM> पुनरारंभ सेवा> SQL सर्वर (MySQL)" पर जाएं और सेवा को पुनरारंभ करें


4

Im mysql के साथ काम कर रहा है और रूट उपयोगकर्ता के साथ पंजीकृत है, जो समाधान मेरे लिए काम करता है वह निम्नलिखित है:

mysql> SET SIONION sql_mode = (Select REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''));


3

यह Ubuntu 14+ पर MySql 5.7+ के लिए एक स्थायी समाधान है:

$ sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"  >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name

यदि आप त्रुटियों के बिना लॉगिन करने में सक्षम हैं - आपको अभी सेट होना चाहिए।


1

आप इसे कॉन्फिग फाइल का उपयोग कर डिसेबल कर सकते हैं my.cnf:

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

तो macOS 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"

1

यहाँ मेरा समाधान phpmyadmin डैशबोर्ड के माध्यम से मैसकल विन्यास को बदल रहा है:

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


0

MySQL संस्करण के साथ 5.7.28 का उपयोग करके जाँच करें
SELECT @@sql_mode; और साथ अद्यतन करें

SET @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.