2013-02-25 9 views
8

मैं एक बहुत ही अजीब व्यवहार है कि मैं अपने एसक्यूएल डीबी में समझ में नहीं कर सकते हैं (मैं MySQL 5.5.8 का उपयोग कर रहा है)।एसक्यूएल: LIKE बनाम = बग?</p> <p>मैं एक मेज एक varchar (10) का नाम है: जो

तो एक इस तरह एक एसक्यूएल चलाएँ:

SELECT ID FROM `names` WHERE `name` = 'joe ' 

मैं एक परिणाम मिलता है। जो लेकिन जब से तालिका में मैं किसी भी 'जो' (अंत में एक स्थान के साथ की जरूरत नहीं है यह गलत है मैं केवल 'जो' (कोई जगह नहीं)

लेकिन अगर मैं निष्पादित है:

SELECT ID FROM `names` WHERE `name` LIKE 'joe ' 

मैं के रूप में मैं उम्मीद मिलती है:। जहाँ तक मुझे पता के रूप में = होना चाहिए कुछ भी नहीं "सटीक" मिलान करते हुए की तरह अधिक है होने के लिए ढीला उप स्ट्रिंग्स और% के साथ इसका उपयोग करने में सक्षम।

मुझे क्या याद आ रही है?

+0

यह है कि यह कैसे बनाया गया है। यह दस्तावेज़ों में है http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like –

+0

यह एक डुप्लिकेट कैसा है? –

उत्तर

10

CHAR या VARCHAR= का उपयोग करके तुलनात्मक स्थान VARCHAR तुलना के लिए महत्वपूर्ण नहीं हैं। string comparison functions देखें:

विशेष रूप से, पीछे वाले स्पेस जो = ऑपरेटर के साथ प्रदर्शन किया CHAR या VARCHAR तुलना के लिए सच नहीं है महत्वपूर्ण हैं,:

mysql> SELECT 'a' = 'a ', 'a' LIKE 'a '; 
+------------+---------------+ 
| 'a' = 'a ' | 'a' LIKE 'a ' | 
+------------+---------------+ 
|   1 |    0 | 
+------------+---------------+ 
1 row in set (0.00 sec) 
+1

प्रतिक्रिया के लिए धन्यवाद, मैंने प्रलेखन की जांच की है और आप बिल्कुल सही हैं, हालांकि यह मेरे लिए थोड़ा अजीब लगता है :) लेकिन जब तक दस्तावेज है ... :) यह एक सुविधा नहीं है – dk766

0

मेरा मानना ​​है कि इस डेटा प्रकार की वजह से है आप उपयोग कर रहे हैं।

CHAR और VARCHAR प्रकार समान हैं, लेकिन वे संग्रहीत और पुनर्प्राप्त किए गए तरीके से अलग हैं। MySQL 5.0.3 के रूप में, वे अधिकतम लंबाई में भी भिन्न होते हैं और पीछे की जगहों को बनाए रखा जाता है या नहीं।

http://dev.mysql.com/doc/refman/5.0/en/char.html

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