मैं, भाषा के एक स्पीकर के रूप में, जिसमें कई गैर-सामान्य पात्र हैं जैसे ÕÜÖÄ, लगता है कि अगर मैं एक ऐप बनाता हूं, जो उपयोगकर्ता को डेटाबेस में सामग्री को सहेजने की अनुमति देता है, तो यह ऐप भाषा सेटिंग्स के अनुसार सही ढंग से डेटा सॉर्ट करने में सक्षम होना चाहिए।पोस्टग्रेस्क्ल सॉर्टिंग भाषा विशिष्ट वर्ण (संयोजन)
इसके अलावा, बहुत छोटी भाषा के भाले के रूप में, जैसे कि एक्ट्री है, पर विचार करना है कि अन्य लोग ऐप का उपयोग कर सकते हैं और अपनी भाषा में सॉर्ट करना चाहते हैं। कई यूरोपीय भाषाओं में भी विशेष पात्रों का अपना मिश्रण होता है।
इससे भी बदतर, यदि आप मिश्रण में रूसी जैसे भाषाओं को शामिल करते हैं - उनके पास पूरी तरह से अलग-अलग वर्ण हैं।
अब से मुझे पता है कि 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) था मैं सब सेट हूँ।
आप किस ऑपरेटिंग सिस्टम का उपयोग करते हैं? – zero323
उबंटू लिनक्स v12.04 –
वैसे, पुर्तगालियों में 'एए' के बाद आते हैं और 'बी' से पहले आते हैं, क्योंकि उच्चारण वाले अक्षरों को उच्चारण के बिना उसी चरित्र के बगल में आदेश दिया जाता है। तो 'पीटी-पीटी' के लिए मैं उम्मीद करता हूं कि यह 'एलन älan ओस्कर ölen öskar' ऑर्डर करने की अपेक्षा करेगा। – ANeves