मैं mysql तालिका में कॉलम का आकार कैसे संशोधित कर सकता हूं?


301

मैंने एक तालिका बनाई है और गलती से इसके बजाय varcharलंबाई डाल दी 300है 65353। मैं कैसे इसे ठीक कर सकता हूं?

एक उदाहरण की सराहना की जाएगी।

जवाबों:


571

क्या आपने यह कोशिश की है?

ALTER TABLE <table_name> MODIFY <col_name> VARCHAR(65353);

यह col_name का प्रकार बदल देगाVARCHAR(65353)


14
क्या इससे डेटा बरकरार रहता है?
फ्लिमल

1
@ फीलम मेरे लिए लगता है।
deed02392

39
@ फिलिम - सिर्फ एक पॉइंटर, अगर आपके पास VARCHAR (100) है और आप इसे VARCHAR (50) में बदल देते हैं, तो यह कॉलम से किसी भी मौजूदा डेटा को काट देगा। हालांकि इस विशिष्ट प्रश्न के अनुसार, स्तंभ को बड़ा करने से डेटा के साथ कोई समस्या नहीं होगी।
वॉरेन सीरजेंट

8
5.7.15 में परीक्षण किया गया @arrenSergent, यदि परिवर्तन से प्रभावित मूल्य हैं, तो यह एक त्रुटि देगा। यह डिफ़ॉल्ट रूप से छोटा नहीं होगा। आपको SUBSTR के साथ पहले से मान अपडेट करने होंगे।
रॉबर्ट टी।

1
@animo सही है। इसके लिए एक पूर्ण उत्तर के लिए देखें stackoverflow.com/a/9611293/1594933
21

26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

आपको कॉलम का नाम दो बार सूचीबद्ध करना होगा, भले ही आप उसका नाम नहीं बदल रहे हों।

ध्यान दें कि यह परिवर्तन करने के बाद, स्तंभ का डेटा प्रकार होगा MEDIUMTEXT


मिकी डी सही है, MODIFYकमांड इसे अधिक संक्षिप्त रूप से कर सकता है।


फिर से MEDIUMTEXTबात करें: एक MySQL पंक्ति केवल 65535 बाइट्स (BLOB / TEXT कॉलम की गिनती नहीं) हो सकती है। यदि आप किसी स्तंभ को बहुत बड़ा करने का प्रयास करते हैं, तो पंक्ति का कुल आकार 65536 या उससे अधिक हो जाता है, तो आपको एक त्रुटि मिल सकती है। यदि आप उस स्तंभ को घोषित करने का प्रयास करते हैं, VARCHAR(65536)तो यह उस तालिका में एकमात्र स्तंभ होने पर भी बहुत बड़ा है, इसलिए MySQL स्वचालित रूप से इसे MEDIUMTEXTडेटा प्रकार में परिवर्तित कर देता है ।

mysql> create table foo (str varchar(300));
mysql> alter table foo modify str varchar(65536);
mysql> show create table foo;
CREATE TABLE `foo` (
  `str` mediumtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

मैं आपके मूल प्रश्न को गलत बताता हूं, आप चाहते हैं VARCHAR(65353), जो MySQL कर सकता है, जब तक कि तालिका के अन्य स्तंभों के साथ स्तंभित आकार 65535 से अधिक न हो जाए।

mysql> create table foo (str1 varchar(300), str2 varchar(300));
mysql> alter table foo modify str2 varchar(65353);
ERROR 1118 (42000): Row size too large. 
The maximum row size for the used table type, not counting BLOBs, is 65535. 
You have to change some columns to TEXT or BLOBs

+1 तुम लोग वही उत्तर देते हो। इसका क्या मतलब है कि स्तंभ का डेटा प्रकार MEDIUMTEXT होगा? thx
Vehomzzz

3
@ बाइल: आमतौर पर एक कॉलम का नाम बदलने और इसे डेटा प्रकार बदलने के लिए उपयोग किया जाता है। MODIFY केवल कॉलम के डेटा प्रकार को बदल देगा
माइक दिनेस्कु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.