प्रत्येक (वर्ण स्ट्रिंग-प्रकार) स्तंभ इसका अपना स्वयं है कैरेक्टर सेट और कोलेशन मेटाडेटा।
अगर, जब कॉलम का डेटा प्रकार निर्दिष्ट किया गया था (अर्थात जब इसे अंतिम बार बनाया या बदला गया था), कोई वर्ण सेट/संयोजन स्पष्ट रूप से नहीं दिया गया था, तो तालिका के डिफ़ॉल्ट वर्ण सेट और संयोजन का उपयोग कॉलम के लिए किया जाएगा।
यदि, जब तालिका निर्दिष्ट किया गया था, कोई डिफ़ॉल्ट वर्ण सेट/संयोजन स्पष्ट रूप से नहीं दिया गया था, तो डेटाबेस का डिफ़ॉल्ट वर्ण सेट और संयोजन तालिका के डिफ़ॉल्ट के लिए उपयोग किया जाएगा।
आपके द्वारा अपने प्रश्न में उद्धृत किए गए आदेश क्रमशः डेटाबेस और तालिका के लिए ऐसे डिफ़ॉल्ट वर्ण सेट/कोलेशन को बदलते हैं। दूसरे शब्दों में, वे केवल उन तालिकाओं और स्तंभों को प्रभावित करेंगे जो उसके बाद बनाई गई हैं—वे नहीं मौजूदा कॉलम (या डेटा) को प्रभावित करते हैं।
मौजूदा डेटा को अपडेट करने के लिए, आपको सबसे पहले चरित्र सेट बदलना
ALTER TABLE
. पर मैनुअल पेज का सेक्शन :
केवल डिफ़ॉल्ट को बदलने के लिए तालिका के लिए वर्ण सेट, इस कथन का उपयोग करें:
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
शब्द DEFAULT
वैकल्पिक है। डिफ़ॉल्ट वर्ण सेट वह वर्ण सेट होता है जिसका उपयोग तब किया जाता है जब आप उन स्तंभों के लिए वर्ण सेट निर्दिष्ट नहीं करते हैं जिन्हें आप बाद में किसी तालिका में जोड़ते हैं (उदाहरण के लिए, ALTER TABLE... कॉलम जोड़ें
के साथ) )।
जब
सिस्टम चर सक्षम है, जो कि डिफ़ॉल्ट सेटिंग है, उन तालिकाओं पर वर्ण सेट रूपांतरण की अनुमति नहीं है जिनमें एक विदेशी कुंजी बाधा में उपयोग किया जाने वाला वर्ण स्ट्रिंग कॉलम शामिल है। समाधान foreign_key_checks
को अक्षम करना है
चरित्र सेट रूपांतरण करने से पहले। विदेशी_की_चेक
. अगर आप foreign_key_checks
को फिर से सक्षम करते हैं
केवल एक टेबल को बदलने के बाद, एक ON DELETE CASCADE
या अपडेट कैस्केड पर
ऑपरेशन इन ऑपरेशनों के दौरान होने वाले अंतर्निहित रूपांतरण के कारण संदर्भ तालिका में डेटा दूषित कर सकता है (बग #45290, बग #74816)।