mysql

2010-02-23 20 views
30

में वैश्विक sql_mode सेट करना मैं mysql में sql_mode सेट करने का प्रयास कर रहा हूं लेकिन यह एक त्रुटि फेंकता है।mysql

कमान:

set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION' 

इस कई मोड सेट करने के लिए उचित तरीके से नहीं है? सत्र और वैश्विक मोड सेट करने के क्या फायदे हैं? जो preffered है? मेरे पास अलग-अलग उपयोगकर्ता हैं जो विभिन्न यूएनसी मानों के साथ डेटाबेस को अपडेट करने का प्रयास कर रहे हैं और सत्र मोड को 'NO_BACKSLASH_ESCAPES' पर सेट करने के लिए प्रेरित करते हैं, हालांकि मैं इसके लिए ग्लोबबल मोड को समझूंगा। इसका कोई मतलब भी है क्या?

कृपया मुझे बताएं।

धन्यवाद।

+0

उन गुमराह उद्धरण वास्तव में मुझे परेशान [mysqld] पर इस लाइन पेस्ट है, पी। जैसा कि अन्य ने कहा, मुझे यकीन है कि यह निश्चित रूप से ठीक नहीं है। –

उत्तर

15

मैंने इसे हल किया।

सही विधा है:

set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
+8

चेतावनी: हमारे अनुभव में यह एक MySQL पुनरारंभ करने के बाद सेटिंग को बनाए रखता है ... –

+0

हां यह – PRP

+2

को पुनरारंभ करने के बाद सेटिंग्स को बनाए रखने के लिए नहीं है, यूनिक्स के लिए पुनरारंभ करने के बाद इसे बनाए रखने के लिए, मुझे ~/.my.cnf फ़ाइल बनाना था और [mysqld] sql_mode = "" जोड़ें। उम्मीद है कि यह –

82

BTW, अगर आप MySQL में वैश्विक सेट:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; 
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION'; 

यह सेट नहीं करेगा यह स्थायी रूप से, और यह हर बार पुनः प्रारंभ करने लौट जाएगा।

तो आप अपने कॉन्फ़िग फ़ाइल ([mysqld] अनुभाग में जैसे /etc/mysql/my.cnf) में यह निर्धारित करना चाहिए, ताकि परिवर्तन एक MySQL पुनः आरंभ करने के बाद प्रभाव में रहेंगे:

कॉन्फ़िग फ़ाइल:/आदि/mysql/मेरी .cnf

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

अद्यतन:

: Mysql के नए संस्करण (5.7.8 या इसके बाद जैसे) थोड़ा अलग वाक्य रचना की आवश्यकता हो सकती

सुनिश्चित करें कि एसक्यूएल-मोडन के बीच एक डैश है जो अंडरस्कोर नहीं है, और वह मोड डबल कोट्स में हैं।

हमेशा MySQL Docs के लिए अपने संस्करण संदर्भ sql-mode options को देखने के लिए।

+0

मदद करता है धन्यवाद, my.cnf में सेटिंग मेरे लिए चाल थी। रुचि रखने वालों के लिए, यह पृष्ठ आपको बताता है कि डिफ़ॉल्ट sql_modes 5.7 और बाद में क्या हैं: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html – Richard

+0

5.7 संस्करण नोट अप करें! वह समस्या थी। –

+0

यह काम करता है। धन्यवाद –

7

कॉन्फ़िग फ़ाइल को कॉपी: /etc/mysql/my.cnf OR /bin/mysql/my.ini

[mysqld] 
port = 3306 
sql-mode="" 

MySQL पुनः आरंभ।

या आप भी

[mysqld] 
port = 3306 
SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 

MySQL पुनः आरंभ कर सकते हैं।

+2

मुझे लगता है कि यह 'sql_mode'' एसक्यूएल-mode'। –

+0

दोनों का उपयोग किया जा सकता है –

+0

@RamanSahasi किस संस्करण पर निर्भर करता है। –

9

mysql कॉन्फ़िगरेशन फ़ाइल का उपयोग कर स्थायी रूप से SQL मोड सेट करना।

मेरे मामले में मुझे फ़ाइल /etc/mysql/mysql.conf.d/mysqld.cnf को mysql.conf.d/etc/mysql/my.cnf में शामिल करना है।मैं के तहत [mysqld]

[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" 

सिर्फ हटाया ONLY_FULL_GROUP_BY एसक्यूएल मोड इस बदलाव की वजह यह समस्या पैदा कर रहा था।

मैं ubuntu 16.04, php 7 उपयोग कर रहा हूँ और mysql --version मुझे इस mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

देना इस परिवर्तन नीचे चलाने के आदेश

sudo service mysql stop 
sudo service mysql start 

अब इस क्वेरी SELECT @@sql_mode द्वारा एसक्यूएल मोड की जाँच करें और आप मोड मिलना चाहिए उसके बाद आपने अभी सेट किया है

1

मेरे मामले में मैं फ़ाइल को बदलने के लिए /etc/mysql/mysql.conf.d/mysqld.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" 

 संबंधित मुद्दे