2016-02-16 4 views
5

मेरे पास एक डेटाबेस (MySQL) है जिसमें मैं विभिन्न भाषाओं में कीवर्ड के साथ 100 000 कीवर्ड संग्रहीत करता हूं। तो एक उदाहरण है यदि मेरे पास तीन कॉलम हैं [आईडी] [तुर्की (utf8_turkish_ci)] [जर्मन (utf8)]खोज इंजन में मल्टी भाषा डेटाबेस एन्कोडिंग

उपयोगकर्ता खोज बॉक्स में जर्मन या तुर्की शब्द दर्ज कर सकते हैं। यदि उपयोगकर्ता जर्मन शब्द में प्रवेश करता है तो सब ठीक है, इसलिए यह तुर्की शब्द को प्रिंट करता है लेकिन इसे तुर्की के साथ कैसे हल किया जाए। मैं पूछता हूँ क्योंकि प्रत्येक भाषा की तरह अपने स्वयं के अतिरिक्त कैरेक्टर हैं एक यू ö एस आदि

तो मैं

mb_convert_encoding 

का उपयोग स्ट्रिंग परिवर्तित करने के लिए करना चाहिए, लेकिन फिर अगर यह एक जर्मन या तुर्की स्ट्रिंग है, इसकी जांच करने मैं लगता है कि जटिल होगा। या टेबल के एन्कोडिंग गलत है?

अब तो यह कैसे लागू करने के लिए तो उपयोगकर्ता दोनों भाषाओं में शब्दों की

+0

यूटीएफ -8 –

उत्तर

0

आप इस काम को सही ढंग से करने के लिए हल करने के लिए कई मुद्दों है कीवर्ड दर्ज कर सकते हैं अटक।

पहले, आपने अपने सभी टेक्स्ट को रखने के लिए utf8 वर्ण सेट चुना है। यह एक अच्छा विकल्प है। यदि यह एक नया 2016 में आवेदन है, तो आप इसके बजाय utf8mb4 वर्ण सेट चुन सकते हैं। एक बार जब आप एक चरित्र सेट चुन लेते हैं तो आपके उपयोगकर्ता आपके टेक्स्ट को पढ़ने में सक्षम होना चाहिए।

दूसरा, खोज और (WHERE और ORDER BY) छँटाई के लिए आप प्रत्येक भाषा के लिए एक उचित मिलान का चयन करने की जरूरत है। आधुनिक जर्मन के लिए, utf8_general_ci सहिष्णुता से अच्छी तरह से काम करेगा। utf8_unicode_ci मानक लेक्सिकल ऑर्डरिंग की आवश्यकता होने पर थोड़ा बेहतर काम करता है। इसे पढ़ें। http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

आधुनिक स्पेनिश के लिए, आपको utf8_spanish_ci का उपयोग करना चाहिए। ऐसा इसलिए है क्योंकि स्पेनिश में एन और Ñ वर्ण समान नहीं मानते हैं। मुझे नहीं पता कि सामान्य collation तुर्की के लिए काम करता है या नहीं।

ध्यान दें कि आपने अपने प्रश्न में चरित्र सेट और संयोजन के विचारों को भ्रमित कर दिया है। आपने अपने तुर्की कॉलम और आपके जर्मन कॉलम के साथ एक चरित्र सेट के साथ एक संयोजन का उल्लेख किया है।

आप स्पष्ट रूप से प्रश्नों में वर्ण सेट और संयोजन निर्दिष्ट कर सकते हैं। उदाहरण के लिए, आप

WHERE _utf8 'München' COLLATE utf8_unicode_ci = table.name; 

इस अभिव्यक्ति में, _utf8 'München' एक चरित्र स्थिर है, और

constant COLLATE utf8_unicode_ci = table.name 

एक प्रश्न विनिर्देशक जो एक स्पष्ट मिलान नाम भी शामिल है लिख सकते हैं। इसे पढ़ें। http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html

तीसरा, आप प्रत्येक भाषा विशिष्ट स्तंभ के लिए एक डिफ़ॉल्ट मिलान आवंटित करने के लिए कर सकते हैं। डिफ़ॉल्ट collations इंडेक्स में बेक्ड हैं, इसलिए वे खोज में तेजी लाने में मदद मिलेगी।

चौथा, आपके उपयोगकर्ताओं को आपके आवेदन में डेटा प्रस्तुत करने के लिए उचित इनपुट विधि (कीबोर्ड मैपिंग आदि) का उपयोग करने की आवश्यकता होगी। तुर्की भाषा के उपयोगकर्ताओं को आशा है कि तुर्की शब्दों को कैसे टाइप करें।

+0

के साथ जांचें मैं यह लिखना भूल गया कि मैं विशेष वर्णों को यूनिकोड के साथ बदलने के साथ तुर्की शब्दों को सहेजता हूं, इसलिए शायद मैं स्ट्रिंग में एक चरित्र का पता लगाने के लिए स्ट्रिंग() का उपयोग करता हूं ताकि इसे यूनिकोड के साथ प्रतिस्थापित किया जा सके। क्वेरी – FKayan

+0

भेजें मेरा मतलब है कि मैं एक सरणी के साथ strtr() का उपयोग करता हूँ – FKayan

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