ऐसा लगता है कि आपका त्रुटि संदेश आपके 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
को अक्षम करें और इसे फिर कभी सक्षम न करें।
इससे गंदगी साफ होनी चाहिए। ध्यान दें कि वास्तविक दुनिया का डेटा हमेशा कुछ पंक्तियों में होता है जो इसमें परिपूर्ण नहीं होते हैं।