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