2012-07-02 12 views
9

जाहिर है एक बहुत ही दुर्लभ मुद्दा है, लेकिन IMO अत्यंत कष्टप्रद और गलत: MySQL में खाली स्थान के पीछे चल तुलना में इस्तेमाल नहीं कर रहे हैं:MySQL बनाने खाली स्थान के बात

mysql> SELECT "A" = "A "; 
+------------+ 
| "A" = "A " | 
+------------+ 
|   1 | 
+------------+ 
1 row in set (0.00 sec) 

यह इस परिदृश्य में विशेष रूप से समस्याग्रस्त है:

mysql> SELECT COUNT(*) FROM eq WHERE name != TRIM(name); 
+------------+ 
| COUNT(*) | 
+------------+ 
|   0 | 
+------------+ 
1 row in set (0.00 sec) 

mysql> UPDATE eq SET name=TRIM(name); 
Query OK, 866 row affected (0.01 sec) 
Rows matched: 650907 Changed: 866 Warnings: 0 

क्या व्हाइटस्पेस का इलाज करने के लिए MySQL को कॉन्फ़िगर करने का कोई तरीका है?

+1

एक द्विआधारी तुलना रिक्ति को हटाने पाएगा: 'बायनरी का चयन 'एक' = बाइनरी 'एक';' ' –

उत्तर

2

आप की तरह

SELECT "A" LIKE "A "; 

0 लेकिन

SELECT "A" LIKE "A"; 

रिटर्न 1

6

the manual के अनुसार वापस आ जाएगी उपयोग कर सकते हैं, एक त्वरित सुधार का उपयोग करना चाहते है:

एसक्यूएल मानक के अनुसार, जैसे एमए करता है , एक प्रति चरित्र के आधार पर tching इस प्रकार यह परिणाम = तुलना ऑपरेटर से अलग उत्पादन कर सकते हैं:

...

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

जब तक आप किसी भी वाइल्डकार्ड का उपयोग नहीं करते हैं, यह = के समान होना चाहिए। - कि एक नज़र लेने लायक हो सकता है Equals(=) vs. LIKE

मैनुअल राज्य नहीं पड़ता कि STRCMP() खाली स्थान के के मामले में = तुलना में अधिक कड़ाई है, और मैं अभी इसे आज़माने नहीं कर सकता: यह स्टैक ओवरफ़्लो सवाल धारणा का समर्थन करने लगता है भी, क्योंकि यह स्पष्ट बनाता है क्यों= का उपयोग नहीं किया जाता है।

टॉम्बॉम द्वारा सुझाए गए बाइनरी तुलना भी एक विकल्प है, लेकिन अन्य दुष्प्रभाव होंगे (जैसे उमलॉट्स की कठोर तुलना, उदाहरण A और Ä अलग होंगे) जो आप चाहें या नहीं चाहेंगे। this question.

+1

STRCMP' को' = 'समान कार्य करने के लिए लगता है। जबकि 'LIKE' भी पूंजीकरण पर ध्यान देता है। धन्यवाद! – Mikhail

+0

@ मिखाइल आह, तो न तो आपके लिए काम करता है? वह बेकार है। तो मुझे लगता है कि बाइनरी तुलना –

2

बाइनरी तुलना जादू शब्द की तुलना में बाइनरी तुलना का उपयोग करने के प्रभावों के बारे में अधिक जानकारी।

Binary Comparison in MySQL Manual

mysql> SELECT 'a' = 'A'; 
     -> 1 
mysql> SELECT BINARY 'a' = 'A'; 
     -> 0 
mysql> SELECT 'a' = 'a '; 
     -> 1 
mysql> SELECT BINARY 'a' = 'a '; 
     -> 0 
+0

+1 जाने का एकमात्र तरीका है, लेकिन ध्यान दें कि यह अन्य व्यवहार भी बदल सकता है (जैसे Umlauts की तुलना) –

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