How to avoid implicit conversion of MySQL (Truncated incorrect DOUBLE value) -
जब मैं इस क्वेरी को निष्पादित करता हूं
mysql & gt; SELECT * परीक्षण से WHERE sample_col = 'foo'; इस तालिका के साथ।
mysql & gt; शो बनाने टेबल परीक्षण \ जी *************************** 1. पंक्ति ************** ************* तालिका: परीक्षण टेबल बनाएं: टेबल बनाएं `test` (` id` पूर्णांक (10) अहस्ताक्षरित नहीं NULL AUTO_INCREMENT, `sample_col` पूर्णांक (11) डिफ़ॉल्ट शून्य, प्राथमिक कुंजी ( `id`)) इंजन = InnoDB AUTO_INCREMENT = 4 डिफ़ॉल्ट charset = UTF8 सेट (0.00 सेकंड) mysql & gt 1 पंक्ति; चयन से * चुनें; + ---- + ------------ + | आईडी | Sample_col | + ---- + ------------ + | 1 | 0 | | 2 | 1 | | 3 | 2 | + ---- + ------------ + 3 पंक्तियां सेट (0.00 सेकंड) MySQL स्वचालित रूप से 'एफू' को WHERE क्लॉज़ के शून्य में परिवर्तित करती है मुझे यह चेतावनी संदेश मिला।
mysql & gt; SELECT * परीक्षण से WHERE sample_col = 'foo'; + ---- + ------------ + | आईडी | Sample_col | + ---- + ------------ + | 1 | 0 | + ---- + ------------ + 1 सेट में पंक्ति, 1 चेतावनी (0.00 सेकंड) mysql & gt; चेतावनी दिखाएं; + --------- + ------ + -------------------------------- --------- + | स्तर | कोड | संदेश | + --------- + ------ + -------------------------------- --------- + | चेतावनी | 1292 | गलत दोहरा मूल्य काट: 'foo' | + --------- + ------ + -------------------------------- --------- + 1 सेट में पंक्ति (0.00 सेकंड) मैं इस चेतावनी को त्रुटि के रूप में रिपोर्ट करने के लिए कैसे MySQL को कॉन्फ़िगर कर सकता हूं? (या कैसे मैं अंतर्निहित रूपांतरण रोक सकता है?)
मैं sql_mode के रूप में सख्त निर्धारित किया है, लेकिन यह SELECT कथन को प्रभावित नहीं लगता है
mysql & gt। SELECT @@ SQL_MODE; + ------------------------------------------ + | | @@ SQL_MODE | + ------------------------------------------ + | | STRICT_ALL_TABLES, NO_ENGINE_SUBSTITUTION | + ------------------------------------------ + MySQL का संस्करण 5.6.16 है।
mysql & gt; @@ संस्करण का चयन करें; + ------------ + | @@ संस्करण | + ------------ + | 5.6.16-लॉग | + ------------ + [UPDATE] क्वेरी SELECT * FROM परीक्षण WHERE sample_col = 'foo'; मेरे कोड का एक बग था। और मुझे गलती नहीं हुई क्योंकि बकाया रूपांतरण के कारण मेरा उद्देश्य "ऐसी क्वेरी से कैसे बचें" या "यह बग जल्द ही कैसे पता लगाएगा" इसलिए मैं गलती से चेतावनी से इस त्रुटि के स्तर को बदलने के लिए असत्य रूपांतरण या तरीका रोकने का तरीका जानना चाहता हूं।
आप बल्कि यह स्पष्ट रूप से कास्टिंग का उपयोग कर कास्ट या CONVERT की कोशिश करनी चाहिए नीचे की तरह कार्य करता है और अंतर्निहित कास्टिंग पर भरोसा नहीं करता। SELECT * से test WHERE sample_col = cast (int के रूप में 'foo'); (या) का चयन करें * परीक्षण से कहां डालें (sample_col as varchar) = 'foo'; इसके अलावा, वहाँ कोई मतलब नहीं है एक INT प्रकार स्ट्रिंग मूल्य के साथ स्तंभ की तुलना और AFAIK, वहाँ ऐसी कोई उपस्थित सेटिंग अंतर्निहित कास्टिंग बंद करें अगर आप वास्तव में इसे 0 में परिवर्तित करने के बजाय त्रुटि का परिणाम चाहते हैं, तो इसे स्पष्ट रूप से डालें; जिस स्थिति में यह त्रुटि निकलता है। अधिक जानकारी के लिए देखें।
Comments
Post a Comment