2011-10-15 9 views
6

मैं एक मिलान जो 0x1235 के नीचे 0x1234 के UTF-8 एन्कोडिंग यूनीकोड ​​मानक में चरित्र मानचित्रण की परवाह किए बिना आदेश देता है करना चाहते हैं। MySQL इसके लिए utf8_bin का उपयोग करता है। एमएसएसएलएल स्पष्ट रूप से http://msdn.microsoft.com/en-us/library/ms143350.aspx में बीआईएन और बीआईएन 2 संयोजन हैं। इन्हें ढूंढना आसान था, मुझे भी collations की एक सूची नहीं मिल सकती है PostgreSQL इस विशिष्ट प्रश्न के बहुत कम जवाब का समर्थन करता है।PostgreSQL UTF-8 द्विआधारी मिलान

उत्तर

5

सी लोकेल करेंगे। यूटीएफ -8 डिज़ाइन किया गया है ताकि बाइट ऑर्डरिंग कोडपॉइंट ऑर्डरिंग भी हो। यह तुच्छ नहीं है, लेकिन पर विचार कैसे UTF-8 काम करता है:

 
Number range Byte 1 Byte 2 Byte 3 
0000-007F  0xxxxxxx 
0080-07FF  110xxxxx 10xxxxxx 
0800-FFFF  1110xxxx 10xxxxxx 10xxxxxx 

जब बाइनरी डेटा छँटाई उर्फ ​​सी स्थान, पहली गैर बराबर बाइट orering etermine होगा। हम यह देखने के लिए तैयार हैं कि यदि यूटीएफ -8 में एन्कोड किए गए दो नंबर भिन्न होते हैं तो पहले गैर-बराबर बाइट निम्न मान के लिए कम होगा। यदि संख्याएं अलग-अलग श्रेणियों में हैं तो पहले बाइट कम संख्या के लिए वास्तव में कम होगी। उसी सीमा के भीतर, आदेश को सचमुच उसी बिट्स द्वारा निर्धारित किया जाता है जैसे एन्कोडिंग के बिना।

+0

यह कोड कोड सॉर्ट है, जो यूनिकोड पर प्रतिस्पर्धात्मक रूप से बेकार है। यूनिकोड द्वारा यूनिकोड कोलेशन एल्गोरिदम में आवश्यक सॉर्ट एल्गोरिदम का उपयोग करके आप इसे उचित वर्णमाला क्रम कैसे बनाते हैं? – tchrist

+2

@ क्रिसमस: यह सवाल नहीं है। –

1

Postgres मिलान क्लस्टर निर्माण पर सिस्टम स्थान से परिभाषित किया गया उपयोग करता है।

आप एनकोड द्वारा ऑर्डर करने के लिए (स्तंभ, 'हेक्स') पाठ के

5

क्रमबद्ध क्रम lc_collate पर निर्भर करता है की कोशिश कर सकते (सिस्टम स्थान पर नहीं है!)। यदि आप कोई अन्य लोकेल प्रदान नहीं करते हैं तो सिस्टम लोकेल केवल डीबी क्लस्टर बनाते समय डिफ़ॉल्ट के रूप में कार्य करता है।

व्यवहार आप उम्मीद कर रहे हैं केवल वातावरण C साथ काम करता है। इसके बारे में सब in the fine manual पढ़ें:

सी और POSIX collations दोनों निर्दिष्ट "पारंपरिक सी" व्यवहार, में जो केवल ASCII अक्षरों 'ए' में "Z" के माध्यम से के रूप में पत्र, और छंटाई किया जाता है इलाज कर रहे हैं कड़ाई से चरित्र कोड बाइट मान द्वारा।

जोर मेरा। PostgreSQL 9.1new features for collation की एक जोड़ी है। ठीक वही हो सकता है जो आप खोज रहे हैं।

+0

आप इसे कैसे बजाय एक अक्षरात्मक तरह एक कोड बिंदु तरह कर कर सकता हूँ? आप जानते हैं, ताकि यह यूनिकोड कोलेशन एल्गोरिदम का उपयोग कर सके। अन्यथा आपको यूनिकोड टेक्स्ट पर वर्णमाला क्रम कभी नहीं मिलेगा। – tchrist

+0

@ क्रिसमस: आम तौर पर आपके पास अपने लोकेल में 'lc_collate' सेट है। उदाहरण: इंग्लैंड में, आपके पास शायद 'lc_collate'' en_EN.utf8' पर सेट होगा। अपनी सेटिंग देखने के लिए 'दिखाएं lc_collate;' का प्रयास करें। अधिक जानकारी के लिए मेरे उत्तर में लिंक का पालन करें। –

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