2011-04-02 21 views
14

के लिए सबसे अच्छा MySQL संयोजन क्या है मैं जर्मन भाषा में एक वेबसाइट बना रहा हूं, इसलिए मैं ä, ü, ß आदि जैसे वर्णों का उपयोग करूँगा, तो आपकी सिफारिशें क्या हैं?जर्मन भाषा

उत्तर

21

वर्ण सेट के रूप में, यदि आप कर सकते हैं, निश्चित रूप से UTF-8।

संयोजन के रूप में - यह विशेष पात्रों वाली भाषाओं के लिए थोड़ा बुरा है। विभिन्न प्रकार के collations हैं। वे कर सकते हैं सभी की दुकान सभी Umlauts और अन्य पात्रों, पर वे में मतभेद है कि वे किस तरह की तुलना में Umlauts का इलाज है, यानी कि क्या

u = ü 

सही या गलत है, और सॉर्टिंग में (जहां वर्णमाला में Umlauts क्रमबद्ध क्रम में स्थित हैं)।

एक लम्बी कहानी कम करने के लिए, आपका सर्वश्रेष्ठ दांव या तो

utf8_unicode_ci

यह केस संवेदी खोज की अनुमति देता है; यह ßss के रूप में व्यवहार करता है और डीआईएन -1 सॉर्टिंग का उपयोग करता है। अफसोस की बात है, सभी गैर-बाइनरी यूनिकोड collations की तरह, यह u = ü का इलाज करता है जो एक भयानक उपद्रव है क्योंकि "मुलर" की खोज "मुल्लेर" भी वापस आ जाएगी। आपको वास्तविक समय में उमलॉट-जागरूक संयोजन स्थापित करके उस पर काम करना होगा।

या utf8_bin

यह मिलान u = ü समस्या है, लेकिन केवल केस संवेदी खोज संभव हो रहे हैं नहीं है।

मुझे पूरी तरह से यकीन नहीं है कि द्विआधारी संयोजन का उपयोग करने के लिए कोई अन्य दुष्प्रभाव हैं या नहीं; मैंने here के बारे में एक प्रश्न पूछा।


This mySQL manual page विभिन्न collations और परिणाम वे हर रोज इस्तेमाल में लाने के ऊपर एक अच्छा सिंहावलोकन देता है।

Here mySQL में उपलब्ध कॉलेशन पर एक सामान्य अवलोकन है।

+0

मुझे पता है कि यह बहुत पुराना है, लेकिन ... मैं आपके ऊपर जो कुछ भी है उसके समान एक utf8 collation लागू करने का प्रयास कर रहा हूं। हालांकि, utf8_unicode_ci वर्ण 'é' का उपयोग करते समय '?' को एन्कोड करता है। क्या आपको कोई विचार है कि वह क्यों है? मैंने सोचा कि utf8 प्रत्येक चरित्र के लिए एक प्रतिनिधित्व था। – wright8191

+0

@ पेक्का, चूंकि 'utf8' त्रुटिपूर्ण है (सच यूनिकोड नहीं), आप इसे' utf8mb4' पर क्यों अनुशंसा करते हैं? – Pacerier

3

utf-8-general-ci या utf-8-unicode-ci

अंतर पता करने के लिए: UTF-8: General? Bin? Unicode?

+3

मुझे लगता है कि आपका मतलब है 'utf8_general_ci' या 'utf8_unicode_ci'। –

2

का समर्थन करने के पूरा UTF-8 मानक आप चारसेट utf8mb4 और MySQL में मिलान utf8mb4_unicode_ci उपयोग करने के लिए है!

नोट: MySQL केवल 0-वर्णसेट का उपयोग करते समय 1-से 3-बाइट वर्णों का समर्थन करता है! यही कारण है कि आधुनिक इमोजी समर्थित नहीं हैं क्योंकि वे 4 बाइट्स का उपयोग करते हैं!

एक ही रास्ता पूरी तरह से UTF-8 मानक का समर्थन करने के चारसेट और सभी टेबल का मिलान बदल सकते हैं और डेटाबेस ही की utf8mb4 और utf8mb4_unicode_ci करने के लिए है। और भी, डेटाबेस कनेक्शन को utf8mb4 का भी उपयोग करने की आवश्यकता है।

mysql सर्वर माइग्रेट किया जा सकने डिफ़ॉल्ट चारसेट जो मैन्युअल /etc/mysql/conf.d/mysql.cnf

[client] 
default-character-set = utf8mb4 

[mysql] 
default-character-set = utf8mb4 

[mysqld] 
# character-set-client-handshake = FALSE ## better not set this! 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 

मौजूदा तालिकाओं में विन्यस्त किया जा सकता के रूप में utf8mb4 का उपयोग करना चाहिए निम्नलिखित एसक्यूएल कथन का उपयोग करने के लिए utf8mb4 :

ALTER TABLE <table-name> CONVERT TO 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci; 

नोट:

  • यकीन है कि किसी भी टेबल colums नहीं होगा के बीच मिलती है बनाने के लिए वर्णमाला-एन्कोडिंग द्वारा धीमा सभी टेबलों को बदलना होगा!
  • के रूप में एक सूचकांक की लंबाई MySQL में सीमित है, प्रति सूचकांक पंक्ति वर्णों की कुल संख्या 4 बाइट से गुणा किया जाना चाहिए और छोटे से 3072

होने के लिए जब innodb_large_prefix विन्यास विकल्प है जरूरत सक्षम, लंबाई सीमा 3072 बाइट्स तक बढ़ा दी गई है, इनो डीडी टेबल के लिए जो डायनामिक और कॉम्प्रसेड पंक्ति प्रारूपों का उपयोग करती हैं।

डेटाबेस की चारसेट और डिफ़ॉल्ट मिलान को बदलने के लिए, इस कमांड चलाएँ:

ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

के बाद से utf8mb4 पूरी तरह से पीछे की ओर UTF8 के साथ संगत है, कोई mojibake या डेटा हानि के अन्य रूपों होने चाहिए।

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