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

mysql अमान्य तिथियों को ठीक करें

ऐसा लगता है कि आपका त्रुटि संदेश आपके MySQL क्लाइंट से आ रहा है, सर्वर से नहीं। इसलिए, सर्वर स्ट्रिक्ट मोड सेट करने से आपको इस क्लाइंट के साथ इन तिथियों को प्रदर्शित करने में मदद नहीं मिलेगी।

ऐसा लगता है कि आपके डेटा में कुछ 2012-09-31 या 2013-02-29 शैली दिनांक हैं। वे सही ढंग से स्वरूपित हैं लेकिन अन्यथा गलत हैं। MySQL के 5.0.2 से पहले के संस्करणों में ये आपके डेटा में सही तरीके से नहीं पकड़े गए। अब, आपका सर्वर, ALLOW_INVALID_DATES पर सेट है उन पर गैगिंग नहीं कर रहा है, बल्कि उन्हें '0000-00-00' में बदल रहा है। और क्लाइंट उनका मजाक उड़ा रहा है।

इसे साफ करने के लिए आपका पहला कदम आपत्तिजनक पंक्तियों की पहचान करना है। आप इसे आजमा सकते हैं।

सबसे पहले, ALLOW_INVALID_DATES चालू करें

फिर, अपनी तालिका में चारों ओर देखने के लिए इस क्वेरी को चलाएँ। SELECT * . का इस्तेमाल न करें

  SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d') 
    FROM mytable
   ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d') 

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

इसके बाद, पता लगाएं कि आप उन्हें कैसे ठीक करना चाहते हैं। पंक्तियां हटाएं? दिनांक को 1941-12-07 में बदलें (वह तिथि जो बदनामी में रहती है)? हम आपको यह नहीं बता सकते कि आपको यहां क्या करना है।

फिर, उन्हें ठीक करें। अगर केवल एक या दो हैं, तो उन्हें एक-एक करके ठीक करें।

  UPDATE mytable
     SET datecol='whatever replacement date'
   WHERE id='the id of the offending row.'

या

  DELETE FROM mytable
        WHERE id='the id of the offending row.'

यदि उनमें से हजारों हैं, तो आप उन्हें कुछ इस तरह से ठीक कर सकते हैं। लेकिन परीक्षण सर्वर पर बहुत सावधानी से समस्या को हल किए बिना ऐसा न करें। अगर आप कोई गलती करते हैं तो आप अपनी टेबल को ट्रैश कर देंगे।

  UPDATE mytable
     SET datecol='whatever replacement date'
   WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')

अपनी समस्याओं को ठीक करने के बाद, वापस जाएं और अपना SELECT * . करें , यह सुनिश्चित करने के लिए कि आपको वे सब मिल गए हैं।

फिर ALLOW_INVALID_DATES को अक्षम करें और इसे फिर कभी सक्षम न करें।

इससे गंदगी साफ होनी चाहिए। ध्यान दें कि वास्तविक दुनिया का डेटा हमेशा कुछ पंक्तियों में होता है जो इसमें परिपूर्ण नहीं होते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL वर्कबेंच का उपयोग करके MySQL को कैसे रोकें / प्रारंभ करें

  2. SQL IN स्टेटमेंट - परिणाम लौटाते समय डुप्लीकेट रखें

  3. Node.js और Express के साथ अपना पहला API कोड करें:एक डेटाबेस कनेक्ट करें

  4. mysql एक कॉलम में सभी मान बदलें

  5. सत्र और सत्र डेटा संग्रहीत करने के लिए कौन सा MySQL डेटाबेस इंजन बेहतर है:MyISAM या InnoDB?