Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

DATE या DATETIME के ​​लिए डिफ़ॉल्ट मान सेट करते समय MySQL में त्रुटि

त्रुटि sql मोड के कारण है जो नवीनतम MYSQL 5.7 प्रलेखन के अनुसार सख्त मोड हो सकता है

MySQL Documentation 5.7 कहता है :

<ब्लॉकक्वॉट>

सख्त मोड प्रभावित करता है कि सर्वर वैध तिथि के रूप में '0000-00-00' को अनुमति देता है या नहीं:यदि सख्त मोड सक्षम नहीं है, तो '0000-00-00' की अनुमति है और सम्मिलित कोई चेतावनी नहीं देता है। यदि सख्त मोड सक्षम है, तो '0000- 00-00' की अनुमति नहीं है और इंसर्ट त्रुटि उत्पन्न करता है, जब तक कि इग्नोर भी नहीं दिया जाता है। 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 आपको STRICT_TRANS_TABLES मोड को mysql कॉन्फ़िग फ़ाइल में या कमांड द्वारा अक्षम करना होगा

आदेश से

SET sql_mode = '';

या

SET GLOBAL sql_mode = '';

कीवर्ड GLOBAL का उपयोग करना सुपर प्रीविलीज की आवश्यकता होती है और यह उस समय से कनेक्ट होने वाले सभी क्लाइंट के संचालन को प्रभावित करता है

अगर ऊपर काम नहीं कर रहा है तो /etc/mysql/my.cnf . पर जाएं (उबंटू के अनुसार) और टिप्पणी करें STRICT_TRANS_TABLES

साथ ही, यदि आप सर्वर स्टार्टअप पर sql मोड को स्थायी रूप से सेट करना चाहते हैं तो SET sql_mode='' शामिल करें my.cnf . में Linux या MacOS पर। विंडोज़ के लिए इसे my.ini . में करना होगा फ़ाइल।

नोट

हालाँकि MYSQL 5.6 में डिफ़ॉल्ट रूप से सख्त मोड सक्षम नहीं है। इसलिए यह के अनुसार त्रुटि उत्पन्न नहीं करता है। MYSQL 6 दस्तावेज़ जो कहता है

<ब्लॉकक्वॉट>

MySQL आपको '0000-00-00' के "शून्य" मान को "डमी तिथि" के रूप में संग्रहीत करने की अनुमति देता है। यह कुछ मामलों में NULL मानों का उपयोग करने से अधिक सुविधाजनक है, और कम डेटा और अनुक्रमणिका स्थान का उपयोग करता है। '0000-00-00' को अस्वीकार करने के लिए, NO_ZERO_DATE SQL मोड को सक्षम करें।

अपडेट करें

बग मामले के बारे में @Dylan-Su द्वारा कहा गया:

मुझे नहीं लगता कि यह वह बग है जिस तरह से समय के साथ 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 के संबंध में अपडेट करें

MySQL के रूप में 5.7.4 के रूप में यह मोड बहिष्कृत है। पिछले संस्करण के लिए आपको कॉन्फिग फाइल में संबंधित लाइन पर कमेंट करना होगा। MySQL 5.7 के दस्तावेज़ NO_ZERO_DATE को देखें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक प्रश्न में एएनएसआई 1992 जॉइन और कॉमा को मिलाना

  2. FORMAT () MySQL में उदाहरण

  3. सप्ताह की संख्या को तिथि में कैसे बदलें?

  4. JDBC स्टेटमेंट उदाहरण - डालें, हटाएं, अपडेट करें, रिकॉर्ड चुनें

  5. MySQL DatedIFF () बनाम TIMESTAMPDIFF ():क्या अंतर है?