दिलचस्प पोस्ट
JSP / Servlet और Ajax का उपयोग कर सर्वर पर फ़ाइलों को कैसे अपलोड करें? डिफ़ॉल्ट के लिए चयन मान रीसेट करें एनजीएनएक्स किसी भी डोमेन नाम का जवाब क्यों दे रहा है? कोई भी FFMPEG के लिए सी # बाइंडिंग का एक सेट जानता है? लाखों रिकॉर्ड के साथ SQLite में कुशल पेजिंग Segue का उपयोग करके दृश्य नियंत्रकों के बीच डेटा पास करना बिना किसी नीले जांच के, नेस्टेड हैशों में लापता तत्वों के लिए NoMethodError से कैसे बचें? NSMutableString के साथ एक फाइल के अंत में संलग्न क्या एसक्यूएल सर्वर में एक डबल का प्रतिनिधित्व करता है? कंडिशनल स्टेटमेंट और टर्नरी ऑपरेटर का उपयोग किए बिना क्यू में अधिकतम तीन नंबर प्राप्त करें JQuery के। टॉगल () विधि के लिए विकल्प जो इवेंटडेटा का समर्थन करता है? आप तारीखों / समयों को एक समय क्षेत्र से दूसरे में कैसे बदल सकते हैं? एचटीटीपी क्लाइंट अनुरोध के लिए आप कंटेंट-टाइप हेडर कैसे सेट करते हैं? सी # नल योग्य स्ट्रिंग त्रुटि unserialize () : ऑफसेट पर त्रुटि

चरित्र सेट और मिलान का मतलब क्या है?

मैं MySQL प्रलेखन पढ़ सकता हूं और यह बहुत स्पष्ट है। लेकिन, यह कैसे तय करता है कि किस पात्र का इस्तेमाल किया जाए? कोलेशन के किस आंकड़े पर प्रभाव पड़ता है?

मैं उन दोनों के स्पष्टीकरण के लिए पूछ रहा हूं और उन्हें कैसे चुनना है

वेब के समाधान से एकत्रित समाधान "चरित्र सेट और मिलान का मतलब क्या है?"

MySQL दस्तावेज़ से :

एक वर्ण सेट प्रतीकों और एन्कोडिंग का एक सेट है एक चरित्र सेट में अक्षरों की तुलना करने के लिए एक संयोजन नियमों का एक समूह है। चलो एक काल्पनिक चरित्र सेट के उदाहरण के साथ स्पष्ट अंतर बनाते हैं।

मान लीजिए कि हमारे चार वर्णों के साथ एक वर्णमाला है: 'ए', 'बी', 'ए', 'बी' हम प्रत्येक अक्षर एक संख्या देते हैं: 'ए' = 0, 'बी' = 1, 'ए' = 2, 'बी' = 3. पत्र 'ए' एक प्रतीक है, संख्या 0 'ए' के ​​लिए एन्कोडिंग है , और सभी चार अक्षरों के संयोजन और उनके एन्कोडिंग एक चरित्र सेट है।

अब, मान लीजिए कि हम दो स्ट्रिंग मानों की तुलना करना चाहते हैं, 'ए' और 'बी' ऐसा करने का सबसे सरल तरीका एन्कोडिंग को देखना है: 'ए' के ​​लिए और 'बी' के लिए 1 के लिए क्योंकि 0 1 से कम है, हम कहते हैं 'ए' 'बी' से कम है अब, हमने जो कुछ किया है, वह हमारे चरित्र सेट पर एक मिलान लागू होता है। कोलेशन नियमों का एक सेट है (इस मामले में केवल एक नियम): "एन्कोडिंग की तुलना करें।" हम एक बाइनरी कॉलेशन के सभी संभव कॉलेशनों का सरलतम कॉल करते हैं।

लेकिन अगर हम यह कहना चाहते हैं कि लोअरकेस और अपरकेस अक्षर समकक्ष हैं? फिर हमारे पास कम से कम दो नियम होंगे: (1) लोअरकेस अक्षरों को 'ए' और 'बी' को 'ए' और 'बी' के बराबर मानें; (2) फिर एन्कोडिंग की तुलना करें हम इसे एक केस-असंवेदनशील मिलान कहते हैं। यह एक बाइनरी कॉलेशन से थोड़ा अधिक जटिल है

वास्तविक जीवन में, अधिकांश चरित्र सेटों में कई अक्षर हैं: सिर्फ 'ए' और 'बी' नहीं, बल्कि पूरे अक्षर, कभी-कभी कई अक्षर या पूर्व लेखन प्रणालियों के हजारों वर्णों के साथ, कई विशेष प्रतीकों और विराम चिह्नों के साथ। इसके अलावा वास्तविक जीवन में, ज्यादातर कोलेशन्स के पास कई नियम हैं: सिर्फ असंवेदनशीलता ही नहीं, बल्कि असंवेदनशीलता (एक "उच्चारण" जर्मन 'ओ' के रूप में एक पात्र के साथ एक निशान है) और बहु-चरित्र मैपिंग (जैसे कि नियम ' ö '=' OE 'दो जर्मन collations में से एक में)।

वर्ण एन्कोडिंग वर्णों को एन्कोड करने का एक तरीका है, ताकि वे स्मृति में फिट हो सकें। यह है, अगर वर्णसेट आईएसओ -8859-15 है, यूरो प्रतीक, € को 0xa4 के रूप में एन्कोड किया जाएगा, और यूटीएफ -8 में, यह 0xe282ac होगा

लैटिन 9 में अक्षरों की तुलना करने के लिए, मिलान के रूप में e é è ê f एफए के रूप में वर्णों का मिलान किया जाता है, यदि उनके बाइनरी प्रस्तुतीकरण द्वारा सॉर्ट किया जाता है, तो यह ef é ê è लेकिन उदाहरण के लिए, फ़्रांसीसी, आप उन्हें क्रम में सोचा होगा कि वे होगा, जो सभी e é è ê समान हैं, और फिर f

एक वर्ण सेट सभी लिखित ग्लिफ़ का एक सबसेट है। एक वर्ण एन्कोडिंग निर्दिष्ट करता है कि उन वर्णों को संख्यात्मक मानों से कैसे मैप किया जाता है। यूटीएफ -8 और यूटीएफ -16 जैसे कुछ चरित्र एन्कोडिंग, यूनिवर्सल कैरेक्टर सेट में कोई भी अक्षर एन्कोड कर सकते हैं। अन्य, जैसे यूएस-एएससीआईआई या आईएसओ -8859-1 केवल एक छोटे उपसंकेत को सांकेतिक शब्दों में बदल सकते हैं, क्योंकि वे क्रमशः 7 और 8 बिट प्रति चरित्र का उपयोग करते हैं। क्योंकि कई मानकों ने एक अक्षर सेट और एक अक्षर एन्कोडिंग दोनों को निर्दिष्ट किया है, शब्द "वर्ण सेट" अक्सर "चरित्र एन्कोडिंग" के लिए प्रतिस्थापित किया जाता है।

एक मिलान में नियम शामिल हैं, जो निर्दिष्ट करते हैं कि वर्णों को क्रमबद्ध करने के लिए कैसे तुलना किया जा सकता है। कोलेशन नियम लोकेल-विशिष्ट हो सकते हैं: दो वर्णों का उचित क्रम भाषा से भाषा में भिन्न होता है।

एक चरित्र सेट और कोलेशन का चयन करना नीचे आता है कि क्या आपका आवेदन अंतर्राष्ट्रीयकरण है या नहीं यदि नहीं, तो आप कौन से लोकेल को लक्षित कर रहे हैं?

चुनने के लिए कि आप किस चरित्र का समर्थन करना चाहते हैं, आपको अपने आवेदन पर विचार करना होगा। यदि आप उपयोगकर्ता द्वारा आपूर्ति की गई इनपुट को संग्रहीत कर रहे हैं, तो हो सकता है कि उन सभी लोकेलों को आगाह करना कठिन हो, जिसमें आपका सॉफ़्टवेयर अंततः उपयोग किया जाएगा। उन सभी को समर्थन देने के लिए, प्रारंभ से यूसीएस (यूनिकोड) का समर्थन करना सबसे अच्छा हो सकता है। हालांकि, इसके लिए एक लागत है; कई पश्चिमी यूरोपीय वर्णों को अब एक के बजाय प्रत्येक चरित्र के दो बाइट्स की आवश्यकता होगी।

यदि आपका डेटाबेस एक सूचकांक बनाने के लिए सम्मिलन का उपयोग करता है, और बाद में सॉर्ट किए गए परिणाम प्रदान करने के लिए उस अनुक्रमणिका का उपयोग करता है, तो सही मिलान का चयन करने में मदद मिल सकती है। हालांकि, चूंकि मिलान नियम अक्सर लोकेल-विशिष्ट होते हैं, यदि किसी अन्य स्थान के नियमों के अनुसार परिणामों को सॉर्ट करने की आवश्यकता होती है तो यह सूचक बेकार होगा।

मैं utf8mb4_unicode_ci का उपयोग करने का सुझाव देता utf8mb4_unicode_ci , जो कि सॉर्टिंग और तुलना के लिए यूनिकोड मानक पर आधारित है, जो कि बहुत सी भाषा की भाषाओं में सटीक रूप से है।