तो, मैं इस पर PostgreSQL के साथ कुछ डेबियन सर्वर है। ऐतिहासिक रूप से, वे सर्वर और PostgreSQL लैटिन 9 चारसेट और बैक के साथ स्थानीयकृत हैं, तब यह ठीक था। अब हमें पोलिश, ग्रीक या चीनी जैसी चीजों को संभालना है, इसलिए इसे बदलना एक बढ़ता हुआ मुद्दा बन गया है।
जब मैंने UTF8 डेटाबेस बनाने की कोशिश की, तो मुझे संदेश मिला:
त्रुटि: UTF8 एन्कोडिंग लोकेल fr_FR से मेल नहीं खाता है: चुने हुए LC_CTYPE सेटिंग में LATIN9 को एन्कोडिंग की आवश्यकता होती है।
कुछ समय के लिए मैंने अपने पुराने पाल गूगल के साथ इस विषय पर कुछ शोध किया, और मुझे पता चला कि कुछ जटिल प्रक्रियाएँ थीं जैसे कि डेबियन को अपडेट करना LANG
, पोस्टग्रेसीक्यू को सही चारसेट के साथ अपडेट करना , सभी LC_
सिस्टम चर और अन्य अस्पष्ट समाधानों को संपादित करना । इसलिए फिलहाल, हम इस मुद्दे को एक तरफ रख देते हैं।
हाल ही में, यह फिर से वापस आ गया, यूनानी लोग सामान चाहते हैं और लैटिन 9 नहीं चाहते हैं। और जब मैं इस मुद्दे पर फिर से विचार कर रहा था, एक सहकर्मी मेरे पास आया और कहा "नहीं, यह आसान है, देखो।"
उन्होंने कुछ भी संपादित नहीं किया, जादू के करतब नहीं किए, उन्होंने बस इस SQL क्वेरी को बनाया:
CREATE DATABASE my_utf8_db
WITH ENCODING='UTF8'
OWNER=admin
TEMPLATE=template0
LC_COLLATE='C'
LC_CTYPE='C'
CONNECTION LIMIT=-1
TABLESPACE=pg_default;
और यह ठीक काम किया।
मैं वास्तव में इसके बारे में नहीं जानता LC_CTYPE='C'
था और मुझे आश्चर्य था कि इसका उपयोग Google और यहां तक कि स्टैक ओवरफ्लो पर पहले समाधान पर नहीं था। मैंने चारों ओर देखा और मुझे केवल PostgreSQL प्रलेखन पर एक उल्लेख मिला।
जब LC_CTYPE C या POSIX होता है, तो किसी भी वर्ण सेट की अनुमति होती है, लेकिन LC_CTYPE की अन्य सेटिंग्स के लिए केवल एक वर्ण सेट होता है, जो सही तरीके से काम करेगा। चूंकि LC_CTYPE सेटिंग initdb द्वारा जमी होती है, इसलिए क्लस्टर के विभिन्न डेटाबेस में विभिन्न एन्कोडिंग का उपयोग करने के लिए स्पष्ट लचीलापन वास्तविक से अधिक सैद्धांतिक होता है, सिवाय इसके कि जब आप C या POSIX लोकेल का चयन करते हैं (इस प्रकार किसी वास्तविक वास्तविक जागरूकता को अक्षम करते हैं)।
तो यह मुझे आश्चर्यचकित कर गया, यह बहुत आसान है, बहुत सही है, नकारात्मक पक्ष क्या हैं? और मैं एक कठिन समय अभी तक एक जवाब मिल रहा है। तो मैं यहाँ पोस्ट करने आया हूँ:
tl; dr: किसी विशिष्ट स्थानीयकरण का उपयोग करने के नकारात्मक पहलू क्या हैं LC_CTYPE='C'
? क्या ऐसा करना बुरा है? मुझे क्या तोड़ने की उम्मीद करनी चाहिए?