लेख http://mysqldump.azundris.com/archives/60-Handling-character-sets.html इस पर चर्चा करता है और यह भी दिखाता है कि क्या होगा।
कृपया ध्यान दें कि आप एक संग्रह के साथ एक वर्ण सेट (वास्तव में एक एन्कोडिंग) मिश्रण कर रहे हैं।
एक वर्ण सेट डिस्क पर बाइट्स में एक स्ट्रिंग के भौतिक प्रतिनिधित्व को परिभाषित करता है। HEX() फ़ंक्शन का उपयोग करके आप इसे दृश्यमान बना सकते हैं, उदाहरण के लिए SELECT HEX(str) FROM t WHERE id = 1
यह देखने के लिए कि MySQL आपकी स्ट्रिंग के बाइट्स को कैसे संग्रहीत करता है। SET NAMES ....
के साथ परिभाषित आपके कनेक्शन के चरित्र सेट के आधार पर, MySQL आपको क्या प्रदान करता है, अलग हो सकता है।
एक संयोजन एक क्रमबद्ध क्रम है। यह चरित्र सेट पर निर्भर है। उदाहरण के लिए, आपका डेटा लैटिन 1 वर्ण सेट में हो सकता है, लेकिन इसे दो जर्मन सॉर्ट ऑर्डर लैटिन 1_german1_ci या latin1_german2_ci के अनुसार आदेश दिया जा सकता है। आपकी पसंद के आधार पर, उमलॉट्स जैसे ö या तो ओई या ओ के रूप में सॉर्ट करेंगे।
जब आप कोई चरित्र सेट बदल रहे हों, तो आपकी तालिका में डेटा को फिर से लिखना होगा। MySQL तालिका में सभी डेटा और सभी अनुक्रमणिका को पढ़ेगा, तालिका की एक छिपी प्रतिलिपि बनाएं जो अस्थायी रूप से डिस्क स्थान ले लेता है, फिर पुरानी तालिका को एक छिपे हुए स्थान पर ले जाता है, छिपी हुई तालिका को स्थानांतरित करता है और फिर पुराने डेटा को खाली करता है अप डिस्क स्थान। कुछ समय के लिए, आपको इसके लिए दो गुना भंडारण की आवश्यकता होगी।
जब आप एक संयोजन बदल रहे हैं, तो डेटा का सॉर्ट ऑर्डर बदलता है लेकिन डेटा ही नहीं। यदि आप जिस कॉलम को बदल रहे हैं वह इंडेक्स का हिस्सा नहीं है, तो फ़्रेम फ़ाइल को फिर से लिखने के अलावा कुछ भी करने की आवश्यकता नहीं है, और MySQL के पर्याप्त हाल के संस्करणों को और अधिक नहीं करना चाहिए।
जब आप किसी सूचकांक का हिस्सा होने वाले कॉलम का एक संयोजन बदल रहे हैं, तो इंडेक्स को फिर से लिखना होगा, क्योंकि एक अनुक्रमणिका एक तालिका का एक क्रमबद्ध अंश है। यह फिर से उल्लिखित वैकल्पिक तालिका तालिका प्रतिलिपि तर्क को ट्रिगर करेगा।
MySQL यह करने के लिए डेटा को संरक्षित करने का प्रयास करता है: जब तक आपके पास डेटा का लक्ष्य लक्षित चरित्र सेट में प्रदर्शित किया जा सकता है, तो रूपांतरण हानिकारक नहीं होगा। डेटा छंटनी चल रही है, तो चेतावनी मुद्रित की जाएगी, और डेटा जो लक्षित चरित्र सेट में प्रदर्शित नहीं किया जा सकता है?