আমি কীভাবে একটি মাইএসকিএল টেবিলের কলামটির আকার পরিবর্তন করতে পারি?


300

আমি একটি টেবিল তৈরি করেছি এবং ঘটনাক্রমে পরিবর্তে varcharদৈর্ঘ্য রেখেছি । আমি কীভাবে এটি ঠিক করতে পারি?30065353

একটি উদাহরণ প্রশংসা হবে।

উত্তর:


570

আপনি কি এই চেষ্টা করেছেন?

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

এই পরিবর্তন হবে COL_NAME 'থেকে টাইপ গুলিVARCHAR(65353)


14
এটি কি ডেটা অক্ষত রাখে?
Flimm

1
@ ফ্লিম আমার কাছে মনে হচ্ছে
deed02392

39
@ ফ্লিম - কেবলমাত্র একটি পয়েন্টার, যদি আপনার কাছে কোনও VARCHAR (100) থাকে এবং আপনি এটি VARCHAR (50) এ পরিবর্তন করেন এটি কলাম থেকে বিদ্যমান কোনও ডেটা কাটবে। যদিও এই নির্দিষ্ট প্রশ্ন অনুসারে, কলামটি আরও বড় করে তোলার সাথে ডেটা নিয়ে সমস্যা হবে না।
ওয়ারেন সার্জেন্ট

8
@ ওয়ারেনসার্জেন্ট, ৫.7.১৫ তে পরীক্ষা করা হয়েছে, যদি পরিবর্তনের দ্বারা প্রভাবিত মান থাকে তবে এটি একটি ত্রুটি ফেলবে। এটি ডিফল্টরূপে কাটা হবে না। আপনাকে প্রথমে একটি সাবস্ক্রাস্টারের মাধ্যমে মানগুলি আপডেট করতে হবে।
রবার্ট টি।

1
@ আনিমো ঠিক আছে। সম্পূর্ণ উত্তরের জন্য এই তাকান stackoverflow.com/a/9611293/1594933
gontard

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

আপনি কলামের নামটি দুবার তালিকাভুক্ত করতে হবে, এমনকি আপনি যদি নামটি পরিবর্তন না করে থাকেন।

মনে রাখবেন যে আপনি এই পরিবর্তনটি করার পরে, কলামটির ডেটা ধরণ হবে MEDIUMTEXT


মিকি ডি সঠিক, MODIFYকমান্ডটি আরও সংক্ষিপ্তভাবে এটি করতে পারে।


MEDIUMTEXTজিনিসটি পুনরায় : একটি মাইএসকিউএল সারিটি কেবল 65535 বাইট হতে পারে (বিএলবি / টেক্সট কলামগুলি গণনা করছে না)। আপনি যদি একটি কলাম 65536 বা তার বেশি আকারের সারির আকার তৈরি করে খুব বড় হয়ে ওঠার চেষ্টা করেন তবে আপনি একটি ত্রুটি পেতে পারেন। আপনি যদি কোনও কলামটি ঘোষণার চেষ্টা করেন VARCHAR(65536)তবে এটি table সারণীর একমাত্র কলাম এমনকি এটি খুব বড়, সুতরাং মাইএসকিউএল স্বয়ংক্রিয়ভাবে এটিকে কোনও 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), যা মাইএসকিউএল করতে পারে, যতক্ষণ না সারণীর অন্য কলামগুলির সাথে কলামের আকারটি সংক্ষিপ্ত করে 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 আপনার ছেলের একই উত্তর আছে। এর অর্থ কী? কলামটির ডেটা ধরণটি মিডিয়ামটেক্সট হবে? ধন্যবাদ
vehomzzz

3
@ বিল: পরিবর্তন সাধারণত একটি কলামের নাম পরিবর্তন করতে এবং এর ডেটা ধরণের পরিবর্তন করতে ব্যবহৃত হয়। মোডিফাই কেবল কলামটির ডেটা ধরণের পরিবর্তন করবে
মাইক ডাইনেসকু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.