mysql - बाइनरी collation का उपयोग कर क्या प्रभाव पड़ता है?




(3)

इस सवाल का जवाब देते हुए, मैं उस चीज़ के बारे में अनिश्चित हो गया जिसे मैंने पर्याप्त जवाब खोजने के लिए प्रबंधित नहीं किया था।

बाइनरी utf8_bin और केस असंवेदनशील utf8_general_ci collations का उपयोग करने के बीच व्यावहारिक अंतर क्या हैं?

मैं तीन देख सकता हूं:

  1. दोनों के पास एक अलग सॉर्टिंग ऑर्डर है; _bin के सॉर्टिंग ऑर्डर को वर्णमाला के अंत में कोई _bin डालने की संभावना है, क्योंकि बाइट मानों की तुलना की जाती है (दाएं?)

  2. _bin में केवल केस संवेदनशील खोज

  3. _bin में कोई A = Ä समानता नहीं

क्या इसके बारे में जागरूक होने के लिए कोई अन्य अंतर या दुष्प्रभाव हैं?

संदर्भ:

इसी तरह के प्रश्न जो इस मुद्दे को संबोधित नहीं करते हैं:


अन्य उत्तरों मतभेदों को अच्छी तरह से समझाते हैं।

कुछ मामलों में बाइनरी संयोजन उपयोगी हो सकता है:

  • कॉलम में हेक्साडेसिमल डेटा जैसे पासवर्ड हैंश होते हैं
  • आप केवल सटीक मैचों में दिलचस्पी रखते हैं, सॉर्ट नहीं करते हैं
  • पहचानकर्ताओं के लिए केवल [a-z0-9_] वर्णों के साथ, आप इसे सॉर्ट करने के लिए भी उपयोग कर सकते हैं
  • किसी कारण से आप CHAR () या VARCHAR कॉलम (जैसे टेलीफ़ोन) में संख्याएं संग्रहीत करते हैं
  • ज़िप कोड
  • UUIDs
  • आदि

उन सभी मामलों में आप बाइनरी संयोजन के साथ एक (छोटे) सीपीयू चक्रों को बचा सकते हैं।


बाइनरी collation आपकी स्ट्रिंग की तुलना बिल्कुल ठीक है क्योंकि सी में strcmp () होगा, अगर अक्षर अलग हैं (चाहे यह मामला या diacritics अंतर हो)। इसके नकारात्मक पक्ष कि सॉर्ट ऑर्डर प्राकृतिक नहीं है।

अप्राकृतिक सॉर्ट ऑर्डर का एक उदाहरण (जैसा कि "बाइनरी" में है): ए, बी, ए, बी प्राकृतिक सॉर्ट ऑर्डर इस मामले में होगा उदाहरण के लिए: ए, ए, बी, बी (एसएमई पत्र की छोटी और पूंजीगत विविधताएं क्रमबद्ध हैं एक दूसरे के बगल में)

बाइनरी collation का व्यावहारिक लाभ इसकी गति है, क्योंकि स्ट्रिंग तुलना बहुत सरल / तेज है। सामान्य स्थिति में, बाइनरी के साथ इंडेक्स क्रमशः अपेक्षित परिणामों का उत्पादन नहीं कर सकता है, हालांकि सटीक मैचों के लिए वे उपयोगी हो सकते हैं।


Utf8_general_ci के साथ, खाते बिना मामले और accentuation लेने के होते हैं। जब आप शब्दों पर प्रश्न पूछने की ज़रूरत होती है तो यह एक अच्छी बात हो सकती है।

Utf8_bin में , मिलान केवल तभी होता है जब तार सख्ती से समान होते हैं। क्वेरी इस तरह तेजी से हैं।





collation