टेक्स्ट के लिए व्यवहार को क्रमबद्ध करें (char
. सहित) और varchar
साथ ही text
प्रकार) वर्तमान संयोजन . पर निर्भर करता है आपके लोकेल का।
पिछले निकट से संबंधित प्रश्न देखें:
- पोस्टग्रेएसक्यूएल सॉर्ट करें
- https://stackoverflow.com/q/21006868/398670
यदि आप अपने स्थानीय भाषा के नियमों का पालन करते हुए उचित रूप से स्थानीयकृत सॉर्ट करने के बजाय ASCII मान द्वारा एक सरल सॉर्ट करना चाहते हैं, तो आप COLLATE
का उपयोग कर सकते हैं खंड
select *
from test
order by title COLLATE "C" ASC
या वैश्विक स्तर पर डेटाबेस संयोजन को बदलें (डंप और रीलोड की आवश्यकता है, या पूर्ण रीइंडेक्स)। मेरे फेडोरा 19 लिनक्स सिस्टम पर, मुझे निम्नलिखित परिणाम मिलते हैं:
regress=> SHOW lc_collate;
lc_collate
-------------
en_US.UTF-8
(1 row)
regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#'))
SELECT title FROM v ORDER BY title ASC;
title
-------
#
a
#a
a#
a#a
(5 rows)
regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#'))
SELECT title FROM v ORDER BY title COLLATE "C" ASC;
title
-------
#
#a
a
a#
a#a
(5 rows)
PostgreSQL आपके ऑपरेटिंग सिस्टम के संयोजन समर्थन का उपयोग करता है, इसलिए यह संभव है कि परिणाम होस्ट OS से होस्ट OS में थोड़ा भिन्न हो। विशेष रूप से, मैक ओएस एक्स के कम से कम कुछ संस्करणों ने यूनिकोड कोलेशन हैंडलिंग को महत्वपूर्ण रूप से तोड़ दिया है।