विचार करने के लिए 3 अलग-अलग मामले हैं:
मान वास्तव में लैटिन1 का उपयोग करके एन्कोड किए गए हैं
यह सुसंगत मामला है:घोषित वर्णसेट और सामग्री एन्कोडिंग मिलान। यह एकमात्र मामला था जिसे मैंने अपने प्रारंभिक उत्तर में शामिल किया था।
आपके द्वारा सुझाए गए आदेश का प्रयोग करें:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
ध्यान दें कि CONVERT TO CHARACTER SET
आदेश केवल MySQL 4.1.2 में दिखाई दिया, इसलिए 2005 से पहले स्थापित डेटाबेस का उपयोग करने वाले किसी भी व्यक्ति को निर्यात/आयात चाल का उपयोग करना पड़ा। यही कारण है कि इंटरनेट पर इतनी पुरानी स्क्रिप्ट और दस्तावेज़ हैं जो इसे पुराने तरीके से कर रहे हैं।
मान पहले से ही utf8 का उपयोग करके एन्कोड किए गए हैं
इस मामले में, आप नहीं चाहते कि mysql किसी भी डेटा को रूपांतरित करे, आपको केवल कॉलम के मेटाडेटा को बदलने की आवश्यकता है।
इसके लिए, आपको पहले प्रकार को BLOB में बदलना होगा, फिर प्रत्येक कॉलम के लिए TEXT utf8 में बदलना होगा, ताकि कोई मूल्य रूपांतरण न हो:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
यह अनुशंसित तरीका है, और यह स्पष्ट रूप से Alter में प्रलेखित है। टेबल सिंटैक्स दस्तावेज़ीकरण ।
मान भिन्न एन्कोडिंग में उपयोग किए जाते हैं
कुछ लिनक्स वितरणों पर कई वर्षों तक डिफ़ॉल्ट एन्कोडिंग लैटिन 1 थी। इस मामले में, आपको दो तकनीकों के संयोजन का उपयोग करना होगा:
- BLOB टाइप ट्रिक का उपयोग करके टेबल मेटा-डेटा को ठीक करें
CONVERT TO
. का उपयोग करके मानों को रूपांतरित करें ।