मैं MySQL में कॉलम के लिए डेटा प्रकार कैसे बदल सकता हूं?


488

मैं फ्लोट से इंट में कई कॉलम के डेटा प्रकार को बदलना चाहता हूं। ऐसा करने का सबसे सरल तरीका क्या है?

अभी तक चिंता का कोई डेटा नहीं है।


6
बस यह स्पष्ट करने के लिए, नीचे दिए गए उत्तर (उपयोग ALTER TABLE), वास्तव में, काम करेंगे भले ही कॉलम में पहले से ही डेटा हो। हालाँकि, एक फ्लोट कॉलम को पूर्णांक कॉलम में परिवर्तित करने से यह किसी भी गैर-पूर्णांक मान को निकटतम पूर्णांक के लिए गोल कर देगा।
इल्मरी करोनें

जवाबों:


897

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

ALTER TABLE tablename MODIFY columnname INTEGER;

यह दिए गए कॉलम के डेटाटाइप को बदल देगा

Howmany कॉलम के आधार पर आप इसे संशोधित करना चाहते हैं, यह एक स्क्रिप्ट उत्पन्न करने के लिए सबसे अच्छा हो सकता है, या कुछ प्रकार के mysql क्लाइंट GUI का उपयोग कर सकता है


88
अनुकूल अनुस्मारक - स्तंभों के लिए डिफ़ॉल्ट NULLABLE है, इसलिए यदि आपके पास एक NULL स्तंभ नहीं है, तो "MODIFY कॉलमनाम INTEGER NOT NULL" का उपयोग करना न भूलें अन्यथा आप अपने कॉलम को NOT NULL से NULL तक नहीं बदलेंगे।
डेस्परर्ट

3
क्या परिवर्तन तालिका तालिका के डेटा को हटा देगी या निष्पादन पर विफल हो जाएगी यदि नए कॉलम प्रकार के साथ कुछ शिकायत नहीं है?
एंडमैनएपीएम

1
अन्य टेबल टैब्लेम मोडिफाइ कॉलम कॉलम इंटिग्रेटेड अहस्ताक्षरित; <- यदि आप नए कॉलम के अहस्ताक्षरित होने की परवाह करते हैं। मेरा मामला था।
mircealungu

मुझे लगता है कि CHARSET या COLLATE के किसी भी विनिर्देश को रखने के लिए @Despertars की चेतावनी भी प्रासंगिक हो सकती है।
हालोर होल्स्टेन स्ट्रैंड


37

आप इसका उपयोग भी कर सकते हैं:

ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)

12

यदि आप एक निश्चित प्रकार के सभी स्तंभों को दूसरे प्रकार में बदलना चाहते हैं, तो आप इस तरह से क्वेरी का उपयोग करके प्रश्न उत्पन्न कर सकते हैं:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' <new datatype> ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = '<your database>' 
    and column_type = '<old datatype>';

उदाहरण के लिए, यदि आप से कॉलम बदलें करना चाहते tinyint(4)करने के लिए bit(1), इसे इस तरह चलाएँ:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' bit(1) ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = 'MyDatabase' 
    and column_type = 'tinyint(4)';

और इस तरह एक आउटपुट प्राप्त करें:

alter table table1 modify finished bit(1)  NOT  NULL;
alter table table2 modify canItBeTrue bit(1)  NOT  NULL;
alter table table3 modify canBeNull bit(1)  NULL;

!! अद्वितीय बाधाओं को नहीं रखता है, लेकिन आसानी से दूसरे- ifपैरामीटर के साथ तय किया जाना चाहिए concat। अगर जरूरत पड़ी तो इसे लागू करने के लिए पाठक के पास छोड़ दूंगा।



5

आप alter table ... change ...विधि का उपयोग करते हैं , उदाहरण के लिए:

mysql> create table yar (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into yar values(5);
Query OK, 1 row affected (0.01 sec)

mysql> alter table yar change id id varchar(255);
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> desc yar;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

मेरा मानना ​​है कि यह बदलाव के बजाय MODIFY है, लेकिन शायद दोनों काम करते हैं।
Zsolt Szilagyi

4

स्तंभ डेटा प्रकार को बदलने के लिए परिवर्तन विधि और संशोधित विधि है

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

फ़ील्ड नाम बदलने के लिए भी परिवर्तन विधि का उपयोग करें

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);

1

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

आप कॉलम के लिए एक डिफ़ॉल्ट मान भी निर्धारित कर सकते हैं बस मूल्य के बाद DEFAULT कीवर्ड जोड़ें।

ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];

यह मारियाबीडी (परीक्षण संस्करण 10.2 का परीक्षण) के लिए भी काम कर रहा है


0

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

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.