MySQL'de bir sütunun veri türünü nasıl değiştirebilirim?


488

Birden çok sütun veri türünü float int değiştirmek istiyorum. Bunu yapmanın en basit yolu nedir?

Endişelenecek henüz bir veri yok.


6
Sadece bunu açıkça belirtmek için, aşağıdaki (kullanma ALTER TABLE) yanıtları aslında sütun zaten veri içeriyor olsa bile işe yarayacaktır. Ancak, bir kayan sütunu bir tamsayı sütununa dönüştürmek, içindeki tamsayı olmayan değerlerin en yakın tamsayıya yuvarlanmasına neden olur.
Ilmari Karonen

Yanıtlar:


897

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

ALTER TABLE tablename MODIFY columnname INTEGER;

Bu, verilen sütunun veri türünü değiştirir

Değiştirmek istediğiniz sütunlara bağlı olarak, bir komut dosyası oluşturmak veya bir çeşit mysql istemci GUI'si kullanmak en iyisi olabilir.


88
Kolay hatırlatma - Sütunlar için varsayılan NULLABLE'dır, bu nedenle DEĞİL DEĞİL bir sütununuz varsa, "Sütun adını INTEGER DEĞİL DEĞİL DEĞİL" seçeneğini kullanmayı unutmayın, yoksa sütununuzu BOŞ DEĞİL yerine NULL olarak değiştirirsiniz.
Despertar

3
Tabloyu değiştirmek, yeni sütun türüyle ilgili bir şey olmadığında tablodaki verileri siler mi yoksa yürütmede başarısız olur mu?
EndermanAPM

1
ALTER TABLE tablename sütun adını INTEGER değiştir imzasız; <- yeni sütunun imzasız olmasını önemsiyorsanız. Benim durumumdu.
mircealungu

@Despertars uyarısının CHARSET veya COLLATE özelliklerini korumak için de uygun olabileceğini düşünüyorum.
Halvor Holsten Strand

44
alter table table_name modify column_name int(5)

37

Bunu da kullanabilirsiniz:

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

12

Belirli bir türdeki tüm sütunları başka bir türe değiştirmek istiyorsanız, aşağıdaki gibi bir sorgu kullanarak sorgular oluşturabilirsiniz:

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>';

Örneğin, sütunları ile arasında değiştirmek istiyorsanız, sütunu şu tinyint(4)şekilde bit(1)çalıştırın:

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)';

ve şöyle bir çıktı alın:

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;

!! Benzersiz kısıtlamaları tutmaz, ancak başka bir ifparametre ile kolayca sabitlenmelidir concat. Gerekirse uygulamayı okuyucuya bırakacağım ..


7
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);

Örn:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);

5

alter table ... change ...Yöntemi kullanırsınız, örneğin:

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)

Değişiklikten ziyade MODIFY olduğuna inanıyorum, ama belki de her ikisi de işe yarıyor.
Zsolt Szilagyi

4

Sütun veri türünü değiştirmek için değiştirme yöntemi ve değiştirme yöntemi vardır

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Alan adını değiştirmek için change yöntemini de kullanın

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);


0

Yorum eklemek için sütun ayrıntılarını değiştirmek isterseniz bunu kullanın

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.