2008-10-13 11 views
7

मेरे रेल एप्लिकेशन द्वारा उपयोग किए गए MySQL डेटाबेस में वर्तमान में latin1_swedish_ci का डिफ़ॉल्ट संयोजन है। चूंकि रेल अनुप्रयोगों (मेरा सहित) का डिफ़ॉल्ट वर्णसेट यूटीएफ -8 है, इसलिए डेटाबेस में utf8_general_ci संयोजन का उपयोग करने के लिए मुझे समझ में आता है।क्या मुझे एक MySQL डेटाबेस को लैटिन 1_swedish_ci collation के साथ utf-8 में माइग्रेट करना चाहिए और यदि ऐसा है, तो कैसे?

क्या मेरी सोच सही है?

मान लीजिए कि को एकत्रित करने और डेटाबेस डेटाबेस में सभी डेटा नए एन्कोडिंग में माइग्रेट करने का सबसे अच्छा तरीका क्या होगा?

उत्तर

1

वर्णमाला के रूप में यूटीएफ -8 में कनवर्ट करें।

संयोजन सेटिंग्स केवल इस तरह सॉर्टिंग और सामान के लिए उपयोग की जाती हैं। उस कॉलेशन का चयन करें जो आपके अधिकांश उपयोगकर्ता अपेक्षा करेंगे।

4

यूटीएफ -8, साथ ही साथ कोई अन्य यूनिकोड एन्कोडिंग योजना, किसी भी भाषा में वर्णों को स्टोर कर सकती है, इसलिए यह आपके डेटाबेस के लिए कोडपेज का एक उत्कृष्ट विकल्प है।

दूसरी तरफ, संयोजन सेटिंग एन्कोडिंग योजना से एक पूरी तरह से अलग मुद्दा है। इसमें सॉर्ट ऑर्डर, ऊपरी/लोअरकेस रूपांतरण, स्ट्रिंग समानता तुलना, और ऐसी चीजें हैं जो भाषा-विशिष्ट हैं। Collation सेटिंग डेटाबेस में उपयोग की जाने वाली भाषा से मेल खाना चाहिए।

यूटीएफ -8 सामान्य संयोजन (मैं यहां मान रहा हूं- मैं विशेष रूप से MySQL से परिचित नहीं हूं) ऐसी परिस्थितियों के लिए उपयोग किया जाता है जहां भाषा अज्ञात है और कुछ सरल डिफ़ॉल्ट ऑर्डरिंग की आवश्यकता है। यह शायद यूनिकोड कोड पॉइंट ऑर्डरिंग के अनुरूप है, जो निश्चित रूप से निश्चित नहीं है कि आप स्वीडिश संग्रहित कर रहे हैं या नहीं।

1

डेटाबेस में अपना मौजूदा डेटा प्रदान करना लैटिन 1 में सीधे एन्कोड किया गया है, तालिका को utf8 में परिवर्तित करना (दस्तावेज़ों में वर्णित वैकल्पिक तालिका का उपयोग करके) बस काम करना चाहिए।

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


समस्या यह है कि बकवास वेब क्षुधा की एक बड़ी संख्या ऐतिहासिक mysql के लिए UTF8 डेटा भेजा है और यह बताया latin1 के रूप में यह इलाज के लिए किया है। MySQL इस पूरी तरह से सम्मान करेगा और निर्देश के अनुसार, जंक को टेबल में सहेज देगा।

लैटिन 1 से utf8 तक टेबल को कनवर्ट करना इस गलती की मरम्मत नहीं करेगा, क्योंकि वास्तव में आपके पास कुल कचरा है। उन्हें मरम्मत करना अनौपचारिक है, खासकर यदि ऐप के जीवनकाल के दौरान यह डेटाबेस के विभिन्न प्रकार के कचरे से बात कर रहा है। mysql क्वेरी के नीचे

+0

ठीक है, डेटा जो वर्ण एन्कोडिंग पर सेट है एक रेल app से आ रहा है utf-8, लैटिन 1 नहीं। संभवतः यह मेरे ऐप को 'बकवास वेब ऐप' श्रेणी में रखता है जो एक लैटिन 1 टेबल में utf-8 भेज रहा है? डेटा का रूपांतरण करने के लिए मैं क्या सुझाव देता हूं? – Olly

+0

यह उत्तर चरित्र एन्कोडिंग के साथ संयोजन को भ्रमित करता है – mattmanser

0

उपयोग अपने कॉलम परिवर्तित करने के लिए:

ALTER TABLE users MODIFY description VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

अपनी मेज के लिए सम्पूर्ण जानकारी देखने के लिए:

SHOW FULL COLUMNS FROM users; 
संबंधित मुद्दे