त्रुटि sql मोड के कारण है जो नवीनतम MYSQL 5.7 प्रलेखन के अनुसार सख्त मोड हो सकता है
MySQL प्रलेखन 5.7 कहते हैं :
सख्त मोड प्रभावित करता है कि क्या सर्वर वैध तिथि के रूप में '0000-00-00' की अनुमति देता है: यदि सख्त मोड सक्षम नहीं है, तो '0000-00-00' की अनुमति है और आवेषण कोई चेतावनी नहीं देते हैं। यदि सख्त मोड सक्षम है, तो '0000-00-00' की अनुमति नहीं है और आवेषण एक त्रुटि पैदा करता है, जब तक कि IGNORE भी नहीं दिया जाता है। INSERT IGNORE और UPDATE IGNORE के लिए, '0000-00-00' की अनुमति है और आवेषण एक चेतावनी का उत्पादन करते हैं।
MYSQL मोड की जाँच करने के लिए
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
STRICT_TRANS_TABLES मोड अक्षम करना
हालाँकि फॉर्मेट की अनुमति देने के लिए 0000-00-00 00:00:00
आपको mysql config फाइल या कमांड द्वारा STRICT_TRANS_TABLES मोड को निष्क्रिय करना होगा
आज्ञा से
SET sql_mode = '';
या
SET GLOBAL sql_mode = '';
कीवर्ड का उपयोग करने के GLOBAL
लिए सुपर प्रिलिग्ज़ की आवश्यकता होती है और यह उस समय से कनेक्ट होने वाले सभी क्लाइंट्स को प्रभावित करता है
अगर ऊपर /etc/mysql/my.cnf
(ubuntu के अनुसार) और टिप्पणी बाहर जाने से काम नहीं कर रहा हैSTRICT_TRANS_TABLES
इसके अलावा, आप स्थायी रूप से सर्वर स्टार्टअप पर एसक्यूएल मोड सेट करना चाहते हैं तो शामिल SET sql_mode=''
में my.cnf
लिनक्स या MacOS पर। खिड़कियों के लिए यह my.ini
फाइल में किया जाना है ।
ध्यान दें
हालांकि सख्त मोड MYSQL 5.6 में डिफ़ॉल्ट रूप से सक्षम नहीं है। इसलिए यह MYSQL 6 प्रलेखन के अनुसार त्रुटि का उत्पादन नहीं करता है जो कहता है
MySQL आपको "डमी डेट" के रूप में '0000-00-00' के "शून्य" मूल्य को स्टोर करने की अनुमति देता है। यह कुछ मामलों में NULL मानों का उपयोग करने से अधिक सुविधाजनक है, और कम डेटा और इंडेक्स स्पेस का उपयोग करता है। '0000-00-00' को अस्वीकार करने के लिए, NO_ZERO_DATE SQL मोड सक्षम करें।
अपडेट करें
@ डायलन-सु द्वारा कहा गया बग मामले के बारे में:
मुझे नहीं लगता कि यह बग है जिस तरह से MYSQL समय के साथ विकसित हुआ है जिसके कारण उत्पाद के आगे सुधार के आधार पर कुछ चीजें बदल दी जाती हैं।
हालाँकि मेरे पास NOW()
फ़ंक्शन से संबंधित एक और बग रिपोर्ट है
डिफ़ॉल्ट फ़ील्ड अब डिफ़ॉल्ट नहीं मानती ()
एक और उपयोगी नोट [देखें TIMESTAMP और DATETIME के लिए स्वत: प्रारंभ और अद्यतन करना ]
MySQL 5.6.5 के अनुसार, TIMESTAMP और DATETIME कॉलम को स्वचालित रूप से प्रारंभिक तिथि और वर्तमान तिथि और समय पर अद्यतन किया जा सकता है (जो कि वर्तमान टाइमस्टैम्प है)। 5.6.5 से पहले, यह केवल TIMESTAMP के लिए, और प्रति तालिका में सबसे अधिक TIMESTAMP स्तंभ के लिए सही है। निम्नलिखित नोट पहले MySQL 5.6.5 और ऊपर के लिए स्वत: प्रारंभ और अद्यतन का वर्णन करते हैं, फिर 5.6.5 से पहले के संस्करणों के लिए अंतर।
NO_ZERO_DATE के बारे में अपडेट करें
5.7.4 के रूप में MySQL के रूप में इस मोड को पदावनत किया गया है। पिछले संस्करण के लिए आपको विन्यास फाइल में संबंधित लाइन का उल्लेख करना होगा। NO_ZERO_DATE को MySQL 5.7 प्रलेखन देखें
NULL
है।