मुटि-भाषा वेबसाइट के लिए मुझे कौन सा कोलाज़ चुनना चाहिए?


25

क्या किसी टक्कर की गति पर कोई प्रभाव पड़ता है? क्या टकराव के आधार पर तालिका का आकार बदलता है?

अगर मैं एक ऐसी वेबसाइट बनाना चाहता हूं, जिसमें सभी संभावित भाषाओं (उदाहरण के लिए गूगल ले लो) का समर्थन किया जाना चाहिए, जो अनुशंसित टकराव होगा?

मुझे इस तरह के पात्रों को संग्रहीत करने की आवश्यकता होगी 日本語, वेबसाइट पर मेरी खोजों somethingको sóméthíngइनपुट के लिए वापस लौटना होगा , साथ ही यह असंवेदनशील होना चाहिए।

मुझे कैसे पता चलेगा कि बनाने के लिए सबसे अच्छा विकल्प कौन सा है? इस मामले में कौन सा टकराव बेहतर है?


4
आप इस प्रश्न को फिर से समझना चाहते हैं कि यह इतना व्यक्तिपरक नहीं है - "सबसे अच्छा" किस उपाय से टकराव? :)
TML

नया शीर्षक काफी बेहतर है
TML

जवाबों:


16

आम तौर पर, यूनिकोड वेरिएंट में से एक संभवतः व्यापक भाषा समर्थन के लिए सबसे अच्छा है - यूटीएफ -8 प्रति कोडपॉइंट कम मेमोरी का उपयोग करने जा रहा है, और इस प्रकार आपको किसी भी समय / अंतरिक्ष ट्रेडऑफ़ में थोड़ा फायदा होगा जो आपको खुद को बनाने की आवश्यकता है; हालाँकि, मुझे लगता है कि कुछ अधिक गूढ़ भाषाओं / लिपियों में से कुछ हैं जो UTF-8 का प्रतिनिधित्व नहीं कर सकते हैं (लेकिन मैं 100% निश्चित नहीं हूं, मैंने इस मामले पर एक संपूर्ण अध्ययन नहीं किया है)।

यह विकिपीडिया लेख प्रत्येक के डिस / फायदे पर ज्ञानवर्धक हो सकता है।


हां, UTF-8 1.1 मिलियन यूनिकोड कोड बिंदुओं को संभाल सकता है।
vz0

धन्यवाद - मैंने सोचा कि कुछ हान वर्ण या ऐसे थे जो UTF-8 में समर्थित नहीं थे, एक ठोस उत्तर देने के लिए अच्छा था।
टीएमएल

8

मेरा मानना ​​है कि आपको यूनिकोड समतलीकरण का उपयोग करना चाहिए जो कि उच्चारण और असंवेदनशील है। कृपया MSDN लेखों का चयन करें Collation का चयन करें और sql collations और सभी जुड़े हुए लेखों का उपयोग करें।


8

मुझे लगता है कि जैसा कि कहा गया है (2015-04-20, "कौन सा टकराव [...]") सवाल का मतलब नहीं है, यह देखते हुए कि स्वीकृत उत्तर टकराव के बजाय एन्कोडिंग के बारे में बात करता है। मुझे बताए गए प्रश्न का उत्तर केवल एक उद्देश्य के बजाय देना चाहिए, क्योंकि मुझे लगता है कि यह दिलचस्प है :-)

विकिपीडिया का कहना है कि "Collation एक मानक क्रम में लिखित जानकारी का संयोजन है"। कंप्यूटिंग में, टकराव "इस तरह के एक आदेश की एक विनिर्देश" के अर्थ पर लिया गया है। दूसरे शब्दों में, एक टकराव एक तीन-तरफा तुलनात्मक फ़ंक्शन की परिभाषा है।

मुझे लगता है कि संक्षिप्त उत्तर "निश्चित रूप से हो सकता है"। कम से कम मुझे निम्नलिखित शेंनिगों के बारे में पता है:

#!/usr/bin/python
name = u"Jonas K\xf6lker" # \xf6 is o-umlaut
enc = name.encode('utf-8')
assert len(name) == 12  # \xf6 is one character
assert len(enc) == 13   # but two bytes in utf-8

import locale
locale.setlocale(locale.LC_COLLATE, "da_DK.utf8") # works on my machine
long_form = locale.strxfrm(enc)
assert len(long_form) == 38

locale.strxfrmएक फ़ंक्शन है Returns a string that behaves for cmp locale-aware, जो है, यह एक स्ट्रिंग को एन्कोड करता है जैसे कि एक अन्य स्ट्रिंग के खिलाफ बाइट-बाइट मानक लेक्सिकोग्राफ़िक तुलना में एन्कोडेड उसी तरह से परिणाम देगा जैसे कि लोकेल द्वारा निर्दिष्ट टकराव फ़ंक्शन के अनुसार स्ट्रिंग्स की तुलना करना।

कुछ अवलोकनों में: da_DK.utf8स्ट्रिंग ouüöको क्रमबद्ध किया गया है। में de_DE.utf8, स्ट्रिंग oöuüक्रमबद्ध है। ध्यान दें कि len(long_form) == 38और 38> 13. (लंबाई भी 38 इंच है de_DE.utf8।)

अपने डेटाबेस कुछ स्ट्रिंग मैदान पर एक सूचकांक है, के अनुसार collated da_DK.utf8, यह हो सकता है आंतरिक रूप से की तरह कुछ कर रही strxfrmहै, ताकि एक सरल तुलना करने के लिए में। (दूसरी ओर, डिस्क धीमी हैं। यह अधिक कॉम्पैक्ट प्रतिनिधित्व के आधार पर अनुक्रमणिका के लिए तेज़ हो सकता है, अगर कम वर्णों की तुलना में अधिक प्रति-वर्ण तुलना लागत ऑफसेट से अधिक है।)

आप पूछते हैं कि "क्या एक कोलाजेशन का क्वेरी गति पर कोई प्रभाव पड़ता है?", जिसके बारे में मुझे पूरा यकीन है कि इसका उत्तर हां है: "C" (उर्फ "POSIX") कोलेशन केवल यूनिकोड कोड पॉइंट वैल्यू की तुलना करता है, जबकि डेनिश ( da_DK.utf8) और जर्मन ( de_DE.utf8) स्थान कुछ अधिक मुश्किल काम करते हैं। इससे क्वेरी की गति पर कुछ प्रभाव पड़ेगा, हालांकि मुझे संदेह है कि यह चिंता करने लायक नहीं होगा।

"क्या टकराव के आधार पर तालिका का आकार बदलता है?" - मैं कल्पना कर सकता हूं कि एक कोलाज के अनुसार एक इंडेक्स हो सकता है और दूसरे कॉलेशन के अनुसार एक अलग इंडेक्स हो सकता है, या ऐसे ही दो सूचकांकों में से एक, कुछ strxfrm- कुछ परिवर्तन के साथ लागू किया जा सकता है। उस काल्पनिक परिदृश्य में, यदि विभिन्न आकार विशेषताओं के साथ दो टकराव होते हैं, तो इसका उत्तर हां में है।

"जो अनुशंसित टकराव होगा?" - यह इस बात पर निर्भर करता है कि आपको स्ट्रिंग्स को क्रमबद्ध करने की आवश्यकता क्यों होगी। यदि यह केवल तार के आदेश के कुछ विहित तरीका है, तो मैं शायद "सी" के साथ जाऊंगा। यदि यह मानव की अपेक्षाओं के अनुसार छंटनी क्रम में उपयोगकर्ताओं को डेटा प्रस्तुत करने के लिए है, और उन उम्मीदों को उनकी संस्कृति द्वारा आकार दिया गया है, और आप चाहते हैं कि डेटाबेस (और कुछ परत नहीं) सॉर्टिंग करने के लिए, शायद आपको प्रति कोलाज एक सूचकांक बनाना चाहिए , यानी कम से कम da_DK.utf8डेन्स के लिए एक और de_DE.utf8जर्मनों के अनुसार एक । मुझे लगता है कि यह काफी जल्दी काफी बड़ा हो सकता है, हालांकि।

यह सब आपके डेटाबेस के आंतरिक कामकाज पर अत्यधिक निर्भर है; मुझे लगता है कि यह "मानकीकृत" (योग्य!) एसक्यूएल से परे है। हमेशा की तरह, अपने विशिष्ट डेटाबेस सिस्टम के प्रलेखन से परामर्श करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.