2013-09-21 8 views
5

मैं, भाषा के एक स्पीकर के रूप में, जिसमें कई गैर-सामान्य पात्र हैं जैसे ÕÜÖÄ, लगता है कि अगर मैं एक ऐप बनाता हूं, जो उपयोगकर्ता को डेटाबेस में सामग्री को सहेजने की अनुमति देता है, तो यह ऐप भाषा सेटिंग्स के अनुसार सही ढंग से डेटा सॉर्ट करने में सक्षम होना चाहिए।पोस्टग्रेस्क्ल सॉर्टिंग भाषा विशिष्ट वर्ण (संयोजन)

इसके अलावा, बहुत छोटी भाषा के भाले के रूप में, जैसे कि एक्ट्री है, पर विचार करना है कि अन्य लोग ऐप का उपयोग कर सकते हैं और अपनी भाषा में सॉर्ट करना चाहते हैं। कई यूरोपीय भाषाओं में भी विशेष पात्रों का अपना मिश्रण होता है।

इससे भी बदतर, यदि आप मिश्रण में रूसी जैसे भाषाओं को शामिल करते हैं - उनके पास पूरी तरह से अलग-अलग वर्ण हैं।

अब से मुझे पता है कि django साइट उन सभी विशेष पात्रों को ठीक से प्रदर्शित कर सकती है, मैं केवल सॉर्टिंग के बारे में चिंतित हूं, जो डेटाबेस स्तर पर जाती है। तो मैं कैसे सुनिश्चित कर सकता हूं कि ऑब्जेक्ट्स डेटाबेस से पढ़े जाते हैं और सही, भाषा विशिष्ट क्रम में क्रमबद्ध होते हैं।

उदाहरण मामला: तो मैं UTF8 एन्कोडिंग के साथ और डिफ़ॉल्ट मिलान (अंग्रेजी UTF8) के साथ डेटाबेस बनाने, फिर तालिका मानों

alan 
oskar 
ölen 
älan 
öskar 

परीक्षण आदेश nimi एएससी द्वारा से चयन * (द्वारा "हल हो जाएगा; ") से:

alan 
älan 
ölen 
oskar 
öskar 

जो गलत है। अगर मैं POSIX मिलान के साथ डाटाबेस बनाने, में तो एक ही क्वेरी परिणाम:

:

alan 
oskar 
älan 
ölen 
öskar 

यह, सही होने के लिए कारण अगर तुम मिश्रण में कुछ और नाम (Olan, एलन) फेंक, तो परिणाम हैं लगता है

alan 
oskar 
älan 
ålan 
õlan 
ölen 
öskar 

कारण, एस्टोनियाई वर्णमाला के अनुसार, वे किया जाना चाहिए:

alan 
oskar 
õlan 
älan 
ölen 
öskar 
ålan (cause å is not in estonian alphabet) 

मैं PostgreSQL 9.1.9 का उपयोग कर रहा है और मैं समझता हूँ कि मिलान समर्थन उपलब्ध है 9.1 के बाद से (http://www.postgresql.org/docs/9.1/interactive/collation.html)।

क्या मुझे इसका उपयोग करना चाहिए? "UTF8" एन्कोडिंग मौजूद नहीं है के लिए मिलान "et_EE.utf8":

SELECT nimi COLLATE "et_EE" FROM test ORDER BY nimi ASC; 

त्रुटि त्रुटि के साथ विफल। ऐसा क्यों है? क्या मुझे इस संयोजन नियम या कुछ बनाना है? क्या यह तरीका है - प्रत्येक क्वेरी के साथ संयोजन नियम निर्दिष्ट करने के लिए, यदि मैं सही क्रम में परिणाम चाहता हूं?

एलन

संपादित करें: 1 सवाल का जवाब देने: मेरी स्थान -एक पता चलता है:

C 
C.UTF-8 
en_AG 
en_AG.utf8 
en_AU.utf8 
en_BW.utf8 
en_CA.utf8 
en_DK.utf8 
en_GB.utf8 
en_HK.utf8 
en_IE.utf8 
en_IN 
en_IN.utf8 
en_NG 
en_NG.utf8 
en_NZ.utf8 
en_PH.utf8 
en_SG.utf8 
en_US.utf8 
en_ZA.utf8 
en_ZM 
en_ZM.utf8 
en_ZW.utf8 
et_EE 
et_EE.iso88591 
et_EE.utf8 
POSIX 
zh_CN.utf8 
zh_SG.utf8 

sudo locale-gen et_EE.UTF-8 
[sudo] password for alan: 
Generating locales... 
    et_EE.UTF-8... up-to-date 
Generation complete. 
sudo locale-gen et_EE 
Generating locales... 
    et_EE.ISO-8859-1... up-to-date 
Generation complete. 

एसक्यूएल अभी भी विफल हालांकि

EDIT2: मुझे लगता है कि मैं इसे समझ से बाहर।

CREATE COLLATION "et_EE" (LOCALE = "et_EE.utf8") 

तो मैं लगता है कि मैं उन खोल स्थान फ़ाइलें बनाने के लिए, कि आप मेरे बारे में, zero323 बताया है, और फिर मैं डेटाबेस के लिए collations बनाने और उसके बाद: मैं भी मिलान ही PostgreSQL में बनाने के लिए (http://www.postgresql.org/docs/9.1/static/sql-createcollation.html) था मैं सब सेट हूँ।

+0

आप किस ऑपरेटिंग सिस्टम का उपयोग करते हैं? – zero323

+0

उबंटू लिनक्स v12.04 –

+0

वैसे, पुर्तगालियों में 'एए' के ​​बाद आते हैं और 'बी' से पहले आते हैं, क्योंकि उच्चारण वाले अक्षरों को उच्चारण के बिना उसी चरित्र के बगल में आदेश दिया जाता है। तो 'पीटी-पीटी' के लिए मैं उम्मीद करता हूं कि यह 'एलन älan ओस्कर ölen öskar' ऑर्डर करने की अपेक्षा करेगा। – ANeves

उत्तर

3

आप स्थापित स्थान की जांच कर सकते का उपयोग कर:

locale -a 

et_EE रन सूचीबद्ध नहीं है इस आदेश:

sudo locale-gen et_EE 
sudo locale-gen et_EE.UTF-8 
sudo update-locale 

और आपकी क्वेरी से प्रयास करें।

+0

धन्यवाद। et_EE अब सूचीबद्ध है, लेकिन किसी भी प्रश्न के लिए कुछ भी नहीं बदला –

+0

क्या आपने पोस्टग्रेज़ को पुनः लोड करने का प्रयास किया है? – zero323

+0

यूप। मैंने sudo /etc/init.d/postgresql को फिर से शुरू किया और निमी एएससी द्वारा परीक्षण आदेश से "चयन निमी कॉललेट" et_EE "की कोशिश की;" फिर। और यह –

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