2012-06-13 13 views
6

को देखते हुए तालिका:अप्रत्याशित परिणाम संख्यात्मक फ़ील्ड के खिलाफ स्ट्रिंग तुलना लौटने

CREATE TABLE IF NOT EXISTS `users` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

पंक्तियों की एक जोड़ी जोड़ें:

INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve'); 

क्यों, ओह क्यों! करता है कि इस प्रश्न के बदले परिणाम:

SELECT * FROM `users` WHERE id = "2this-is-not a numeric value" 

परिणाम:

query returned 1 row(s) in 0.0003 sec 
id name 
----------------- 
2 Larry 

में इस्तेमाल किया स्ट्रिंग जहां खंड स्पष्ट रूप से एक अंकीय मान के लिए परिवर्तित किया जा रहा है - जो ऐसा करने के लिए कहा ?! मुझे कोई भी दस्तावेज नहीं मिल रहा है जो mysql या PHP का सुझाव देता है, मेरी स्ट्रिंग अक्षरशः ऑटो-कास्ट करने का अनुमान लगाएगा।

यह केवल तभी काम करता है जब संख्यात्मक वर्ण स्ट्रिंग में पहला होता है, "this 2 is not numeric" परिणाम नहीं लौटाएगा। "12 2"12, "1 2" (एक-स्पेस-दो) 1 बन जाएगा।

इस व्यवहार को समझाते हुए कोई भी लेख या दस्तावेज की सराहना की जाएगी।

+0

doens't mysql उपयोग 'के बजाय "यह सिर्फ यह कास्ट करने के लिए परोक्ष numerber करने की कोशिश और फिर काटना संख्यात्मक मान को देखकर हो सकता है गैर-संख्यात्मक मान। तो ... क्यों ओह क्यों!: डी क्या आप एक संख्यात्मक क्षेत्र के लिए उद्धरण का उपयोग कर रहे हैं जो इसे एक अंतर्निहित रूपांतरण करने के लिए मजबूर कर रहा है? कहने की जरूरत नहीं है कि मुझे यह अजीब व्यवहार भी है। – xQbert

+0

या तो। मैं हमेशा एकल उद्धरण का उपयोग करता हूं कोड के लिए, इसलिए मैं हमेशा –

+0

पर डबल कोट्स भेजता हूं, मुझे आश्चर्य है कि अगर आप अपनी स्ट्रिंग को चुनिंदा रूप से बड़े पैमाने पर डालेंगे तो आपको क्या परिणाम मिलेगा। अगर आपको 2 मिलते हैं ... तो यह निहित रूपांतरण है और मेरा ओ मेरा है ओडीडी व्यवहार – xQbert

उत्तर

10

यह MySQL प्रलेखन यहाँ में है: स्ट्रिंग को निरूपित करने के http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

+1

'चयन कन्वर्ट ("2this-is-num संख्यात्मक मान नहीं है", UNSIGNED) 'रिटर्न' 2'। शायद आप इसे अपने उत्तर में जोड़ सकते हैं। – Mike

+0

पसंद नहीं है। मुझे 0 परिणाम चाहिए - कोई पंक्ति में "2yourmom" की आईडी नहीं है। जब मैं कहता हूं कि 'कहां आईडी = "2yourmom" ', मेरा मतलब सचमुच है कि आईडी उस मान के बराबर है। ऑटो-कास्ट बेकार है, किसी भी भाषा में ऐसा होता है। वैसे भी ... लिंक के लिए धन्यवाद: डी –

+0

इस नाखून का कारण +1। Mysql में लागू रूपांतरण एक int के बाद गैर-संख्यात्मक मान छोड़ देंगे और फिर निहित रूपांतरण करेंगे। मेरे लिए नरक के रूप में डरावना है लेकिन यह दस्तावेज़ों में है – xQbert

संबंधित मुद्दे