2011-08-11 12 views
5

मुझे mysql तालिका वर्णमाला में समस्या है। मेरे डेटाबेस में प्रत्येक तालिका में डिफ़ॉल्ट वर्णमाला है। उदाहरण के लिए:MySQL डिफ़ॉल्ट तालिका वर्णसेट को डेटाबेस वर्णसेट में बदलता है

CREATE TABLE privacy_settings (
    id_privacy_setting int(11) NOT NULL AUTO_INCREMENT, 
    id_account int(11) NOT NULL, 
    setting_name varchar(255) NOT NULL DEFAULT '0', 
    privacy_level int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id_privacy_setting), 
    KEY fk_privacy_settings_accounts (id_account), 
    CONSTRAINT fk_privacy_settings_accounts FOREIGN KEY (id_account) REFERENCES accounts (id_account) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

मैं डिफ़ॉल्ट CHARSET ब्लॉक निकालना चाहते हैं, तो तालिका डेटाबेस डिफ़ॉल्ट चारसेट इस्तेमाल कर सकते हैं:

CREATE TABLE privacy_settings (
     id_privacy_setting int(11) NOT NULL AUTO_INCREMENT, 
     id_account int(11) NOT NULL, 
     setting_name varchar(255) NOT NULL DEFAULT '0', 
     privacy_level int(11) NOT NULL DEFAULT '0', 
     PRIMARY KEY (id_privacy_setting), 
     KEY fk_privacy_settings_accounts (id_account), 
     CONSTRAINT fk_privacy_settings_accounts FOREIGN KEY (id_account) REFERENCES accounts (id_account) ON DELETE NO ACTION ON UPDATE NO ACTION 
    ) ENGINE=InnoDB 

वहाँ मेज पुनः बनाने के बिना यह करने के लिए कोई तरीका है?

उत्तर

9

MySQL Documentation से एक मेज के चरित्र सेट बदलने के लिए,:

आप, टेबल डिफ़ॉल्ट वर्ण सेट और सभी चरित्र कॉलम (CHAR, VARCHAR, पाठ) एक नए चरित्र सेट करने के लिए बदल इस तरह एक बयान उपयोग करना चाहते हैं : (Default Character Set and Collation से)

:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

आप एक अलग डिफ़ॉल्ट वर्ण सेट का उपयोग करने के लिए एक पूरा डेटाबेस परिवर्तित करना चाहते हैं, तो आप इस बयान जारी कर सकते हैं

ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name; 
+0

मुझे पता है, लेकिन जब मैं ऐसा करते हैं, 'डिफ़ॉल्ट CHARSET' ब्लॉक मेरी मेज परिभाषा – Ris90

+0

से न निकले आप तब पूरे डेटाबेस को बदलना चाह सकते हैं। मैंने जवाब में और जानकारी जोड़ दी है। मुझे संदेह है कि डिफ़ॉल्ट वर्णमाला और सक्रिय वर्णमाला आपकी तालिका के लिए अलग हो सकती है, लेकिन यह इस बात पर निर्भर करती है कि आप परिभाषा कैसे उत्पन्न कर रहे हैं। 'तालिका बनाएं tbl_name' को काम करना चाहिए। चरित्र सेट को बदलने के लिए 'वैकल्पिक तालिका' कथन निष्पादित करने के बाद, 'तालिका बनाएं ...' क्वेरी नई वर्ण सेट को डिफॉल्ट चार्ट के रूप में दिखाती है। वर्णमाला/collations की सूची प्राप्त करने के लिए, ['COLOWATION' दिखाएं] का उपयोग करें (http://dev.mysql.com/doc/refman/5.1/en/show-collation.html)। – JYelton

+0

मैं टेबल परिभाषा से DEFAULT CHARSET ब्लॉक को पूरी तरह से निकालने के लिए wannt नहीं चाहता, तालिका के लिए डिफ़ॉल्ट वर्णसेट का पीछा न करने के लिए, लेकिन प्रत्येक तालिका को डेटाबेस एन्कोडिंग – Ris90

2

आप उपयोग कर सकते हैं मिलान और डिफ़ॉल्ट वर्ण टेबल और स्कीमा के लिए सेट बदलने के लिए निम्नलिखित:

alter table TABLENAME convert to CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
alter database SCHEMA default character set utf8 COLLATE utf8_unicode_ci; 
संबंधित मुद्दे