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


488

আমি একাধিক কলামের ডেটা ধরণটি ফ্লোট থেকে ইনট পর্যন্ত পরিবর্তন করতে চাই। এটি করার সহজ উপায় কী?

এখনও চিন্তার কোনও তথ্য নেই।


6
কেবল এটি স্পষ্ট করতে, নীচের উত্তরগুলি (ব্যবহার করে ALTER TABLE) বাস্তবে, কলামটিতে ইতিমধ্যে ডেটা থাকলেও কাজ করবে। তবে, একটি ফ্লোট কলামকে একটি পূর্ণসংখ্যা কলামে রূপান্তরিত করার ফলে এর মধ্যে কোনও অ-পূর্ণসংখ্যার মানগুলি নিকটতম পূর্ণসংখ্যার সাথে বৃত্তাকারে পরিণত করবে।
ইলমারি করোনেন

উত্তর:


897

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

ALTER TABLE tablename MODIFY columnname INTEGER;

এটি প্রদত্ত কলামটির ডেটাটাইপ পরিবর্তন করবে

আপনি কীভাবে কলামগুলিকে সংশোধন করতে চান তার উপর নির্ভর করে কোনও স্ক্রিপ্ট তৈরি করা ভাল হতে পারে, বা কোনও ধরণের mysql ক্লায়েন্ট জিইউআই ব্যবহার করা উচিত


88
বন্ধুত্বপূর্ণ অনুস্মারক - কলামগুলির জন্য ডিফল্ট হ'ল নুবল, সুতরাং যদি আপনার কাছে একটি নল কলাম না থাকে তবে "মোডাইফাই কলামনাম ইন্টিগ্রেট নট নুল" ব্যবহার করতে ভুলবেন না অন্যথায় আপনি আপনার কলামটি নট নয় নূলে বদলে ফেলবেন।
দেশ্পের্তে

3
যদি নতুন কলামের ধরণের কোনও অভিযোগ না করা থাকে তবে টেবিলের টেবিলের ডেটা মুছে ফেলা হবে বা কার্যকর করতে ব্যর্থ হবে?
এন্ডারম্যানএপিএম

1
টেবিলের টেবিলের নাম মোডিফাই কলামের নাম INTEGER স্বাক্ষরযুক্ত; <- আপনি যদি নতুন কলামটি স্বাক্ষরবিহীন হওয়ার বিষয়ে চিন্তা করেন। আমার মামলা ছিল।
মিরসিয়ালঙ্গু

আমি মনে করি @ ডেস্পার্টারস সতর্কতা চারসেটের বা স্পষ্টকরণের কোনও নির্দিষ্টকরণ রাখার জন্যও প্রাসঙ্গিক হতে পারে।
হালভোর হোলস্টেন স্ট্র্যান্ড


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)

আমি বিশ্বাস করি এটি পরিবর্তনের পরিবর্তে মোডিফাই হয়েছে তবে সম্ভবত উভয়ই কাজ করে।
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

আপনি কলামটির জন্য একটি ডিফল্ট মান সেট করতে পারেন কেবলমাত্র মান অনুসারে ডিফল্ট কীওয়ার্ড যুক্ত করুন।

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]' 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.