MySQL में केस-सेंसिटिविटी को समझना
LIKE ऑपरेटर का उपयोग करने वाली आपकी MySQL क्वेरी केस-सेंसिटिविटी प्रदर्शित करती प्रतीत होती है, भले ही आपकी तालिका utf8_general_ci के रूप में एन्कोड की गई हो MyISAM स्टोरेज इंजन के साथ। यह व्यवहार हैरान करने वाला हो सकता है, और समस्या को हल करने के लिए अंतर्निहित कारण को समझना महत्वपूर्ण है।
बाइनरी बनाम गैर-बाइनरी स्ट्रिंग तुलना:
इसे समझने की कुंजी व्यवहार बाइनरी और गैर-बाइनरी स्ट्रिंग तुलना के बीच अंतर में निहित है। डिफ़ॉल्ट रूप से, MySQL गैर-बाइनरी स्ट्रिंग तुलना करता है, जो utf8_general_ci सहित अधिकांश वर्ण सेटों के लिए केस-संवेदी है।
बाइनरी तुलना के साथ केस-संवेदनशीलता को ठीक करना:
केस संवेदनशीलता समस्या को हल करने के लिए, आप बाइनरी स्ट्रिंग तुलना का उपयोग करने के लिए अपनी क्वेरी को संशोधित कर सकते हैं। यह LIKE ऑपरेटर के दाहिने हाथ के ऑपरेंड को BINARY कीवर्ड के साथ उपसर्ग करके प्राप्त किया जाता है। सही की गई क्वेरी इस प्रकार दिखाई देगी:
SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';
यह संशोधन MySQL को बाइनरी स्ट्रिंग तुलना का उपयोग करने के लिए मजबूर करता है, जो है केस-असंवेदनशील।
वैकल्पिक समाधान का उपयोग करना COLLATE:
केस-असंवेदनशील स्ट्रिंग तुलना प्राप्त करने के लिए एक वैकल्पिक तरीका COLLATE क्लॉज का उपयोग करना है। COLLATE खंड स्ट्रिंग तुलना पर लागू होने वाले वर्ण सेट और संयोजन नियमों को निर्दिष्ट करता है। Utf8_bin संयोजन को निर्दिष्ट करके, आप MySQL को बाइनरी स्ट्रिंग तुलना का उपयोग करने के लिए बाध्य कर सकते हैं। COLLATE का उपयोग करने वाली क्वेरी होगी:
SELECT .... FROM .... WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3