मैंने गलती से ONLY_FULL_GROUP_BY मोड को इस तरह सक्षम किया:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
मैं इसे कैसे निष्क्रिय करूं?
column
अपनी क्वेरी को वापस लेने के लिए Any_VALUE ( ) फ़ंक्शन का उपयोग कर सकते हैं । डॉक यहां
मैंने गलती से ONLY_FULL_GROUP_BY मोड को इस तरह सक्षम किया:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
मैं इसे कैसे निष्क्रिय करूं?
column
अपनी क्वेरी को वापस लेने के लिए Any_VALUE ( ) फ़ंक्शन का उपयोग कर सकते हैं । डॉक यहां
जवाबों:
समाधान 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 निकालें
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, MySQL वैसे भी रिकॉर्ड से अवांछित कॉमा को हटा देता है। ओपी का जवाब सही है।
GLOBAL
मेरे लिए काम नहीं किया, लेकिन SESSION
किया। SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
अपनी वर्तमान 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 के साथ असंगत है। "उन चरणों को करें:
sudo nano /etc/mysql/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"
sudo service mysql restart
MySQL को पुनरारंभ करने के लिए
यह सभी उपयोगकर्ताओं के ONLY_FULL_GROUP_BY
लिए अक्षम हो जाएगा
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
कि इस फ़ाइल में नहीं हो सकता है, यह एक निर्देशिका में शामिल हो सकता है। पहले इस कमांड का उपयोग करें: grep -R "\[mysqld\]" *
यह देखने के लिए कि क्या है - और उस मामले के लिए प्रयास करेंgrep -R "\bsql_mode\b" *
उपयोग करने में सावधानी बरतें
SET sql_mode = ''
यह वास्तव में वर्तमान में सक्षम सभी मोड को साफ करता है। यदि आप अन्य सेटिंग्स के साथ गड़बड़ नहीं करना चाहते हैं, तो आप एक करना चाहते हैं
SELECT @@sql_mode
सबसे पहले, सक्षम मोड की अल्पविराम से अलग सूची प्राप्त करने के लिए, फिर ONLY_FULL_GROUP_BY
विकल्प के बिना इस सूची में सेट करें ।
then SET it to this list without the ONLY_FULL_GROUP_BY option.
:?
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';
sql_mode=<comma-separated-list>
और फिर अपना सर्वर बंद करें और शुरू करें। के स्थान के लिए अपने ऑपरेटिंग सिस्टम के लिए डॉक्स का पालन करें, और संपादित करने के लिए सबसे अच्छा तरीका, my.cnf।
इसे आजमाइए:
SET sql_mode = ''
सामुदायिक नोट: जैसा कि नीचे दिए गए उत्तरों में बताया गया है, यह वास्तव में वर्तमान में सक्षम सभी SQL मोड को साफ करता है । यह जरूरी नहीं है कि आप क्या चाहते हैं।
''
= 'full group by is disabled'
? MySQL कुछ सुंदर गूंगा काम करता है, लेकिन एक वहाँ है।
0 rows affected
और मेरी क्वेरी अभी भी काम नहीं करती है:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
करना सुनिश्चित करें ।
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;
sql_mode
पिछले मूल्य पर रोलबैक। अब मैं क्या कर सकता हूँ?
मौजूदा हटाने के बिना 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
@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',''))"
इसने मेरे लिए ठीक काम किया।
SET NAMES
इस पद्धति का उपयोग न करें, ज्यादातर मामलों में इसे पहले से सेटिफ़िकेशन की आवश्यकता नहीं है इसे doctrine.dbal.charset cofnig के माध्यम से सेट करें: symfony.com/doc/reistent/reference/configuration/doctrine.html , और इसे पीडीओ डीएनएस के माध्यम से ठीक से करता है, सेट नाम ऐसा करने का पुराना तरीका है, जिसका उपयोग PHP संस्करण के लिए 5.3 से अधिक नहीं होना चाहिए
पर:
करना:
$ 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
/etc/mysql/mysql.cnf
2 कॉन्फिग फोल्डर !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
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
बजाय एक नई फ़ाइल बनाना महत्वपूर्ण है
मैंने देखा है कि जब तक 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 मान अस्वीकृति को दबाने के लिए उपयोग कर सकते हैं , आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं
ANY_VALUE()
MySQL प्रलेखन भी निम्न विधियों में निर्दिष्ट करता है:
sql-mode="<modes>"
एक विकल्प फ़ाइल में सेट करें जैसे कि my.cnf (यूनिक्स ऑपरेटिंग सिस्टम) या my.ini (विंडोज)।--sql-mode="<modes>"
विकल्प का उपयोग करें ।* जहां <modes>
अल्पविराम द्वारा अलग-अलग मोड की एक सूची है।
SQL मोड को स्पष्ट रूप से साफ़ करने के लिए, इसे एक खाली स्ट्रिंग का उपयोग करके सेट करें --sql-mode=""
कमांड लाइन पर या sql-mode=""
विकल्प फ़ाइल में पर ।
मैंने जोड़ा sql-mode=""
विकल्प/etc/my.cnf
और यह काम कर गया।
यह SO समाधान यह पता लगाने के तरीकों पर चर्चा करता है कि My.cn फाइल का उपयोग MySQL द्वारा किस लिए किया जा रहा है।
बदलाव करने के बाद MySQL को पुनरारंभ करना न भूलें।
SELECT @@GLOBAL.sql_mode;
यदि आप WAMP का उपयोग कर रहे हैं। WAMP आइकन पर बायाँ-क्लिक करें फिर गोटो MySQL -> MySQL सेटिंग्स -> sql-mode और फिर sql-mode-> उपयोगकर्ता मोड चुनें
मेरे एसक्यूएल (संस्करण 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
sql_mode := ''
संभव होने का दावा करते हैं। आप असहमत क्यों हैं?
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 कंसोल पर लॉगिन करने के लिए एक अंतिम परीक्षण करें। यह रहा!
यह वही है जो मैंने मैसकेल कार्यक्षेत्र पर तय करने के लिए किया था:
इससे पहले कि मैं नीचे दिए गए आदेश के साथ वर्तमान मूल्य मिला
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'
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/
आशा है कि यह किसी की मदद करेगा!
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
''
यदि आप 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
मैं सिद्धांत का उपयोग कर रहा हूँ और मैंने अपने सिद्धांत में ड्राइवर जोड़े हैं। 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 में उपयोगकर्ता को विशेषाधिकारों में सक्रिय सुपरर की आवश्यकता होती है।
जिनके लिए cPanel / WHM के साथ VPS / Server चल रहा है , आप ONLY_FULL_GROUP_BY को स्थायी रूप से अक्षम करने के लिए निम्न कार्य कर सकते हैं
आपको रूट एक्सेस की आवश्यकता है (या तो VPS या समर्पित सर्वर पर)
WHM को रूट के रूप में दर्ज करें और phpMyAdmin चलाएं
वेरिएबल्स पर क्लिक करें, देखें 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
SFTP - SSH (रूट) के माध्यम से आप से कनेक्ट करें और फ़ाइल डाउनलोड करें /etc/my.cnf
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
my.cnf
फ़ाइल को सहेजें और इसे वापस अपलोड करें/etc/
WHM दर्ज करें और "WHM> पुनरारंभ सेवा> SQL सर्वर (MySQL)" पर जाएं और सेवा को पुनरारंभ करें
Im mysql के साथ काम कर रहा है और रूट उपयोगकर्ता के साथ पंजीकृत है, जो समाधान मेरे लिए काम करता है वह निम्नलिखित है:
mysql> SET SIONION sql_mode = (Select REPLACE (@@ sql_mode, 'ONLY_FULL_GROUP_BY', ''));
यह 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
यदि आप त्रुटियों के बिना लॉगिन करने में सक्षम हैं - आपको अभी सेट होना चाहिए।
आप इसे कॉन्फिग फाइल का उपयोग कर डिसेबल कर सकते हैं 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"
यहाँ मेरा समाधान phpmyadmin डैशबोर्ड के माध्यम से मैसकल विन्यास को बदल रहा है:
ठीक करने के लिए "यह sql_mode = only_full_group_by" के साथ असंगत है: phpmyadmin और गोटो होम पेज खोलें और 'वेरिएबल्स' सबमेनू चुनें। Sql मोड खोजने के लिए नीचे स्क्रॉल करें। Sql मोड को संपादित करें और 'ONLY_FULL_GROUP_BY' को निकालें।
SET sql_mode = ''
?