2009-08-31 28 views
312

Birden çok sütunun veri türünü float'tan int'ye değiştirmek istiyorum. Bunu yapmanın en basit yolu nedir?MySQL'de bir sütun için veri türünü nasıl değiştiririm?

Henüz endişelenecek bir veri yok.

+3

Sadece bu açık hale getirmek için, ('alter table' kullanarak) aşağıda cevapları olacak Aslında, sütun zaten veri içeriyor olsa bile çalışır. Ancak, bir kayan sütunun bir tamsayı sütununa dönüştürülmesi, içinde tamsayı olmayan değerlerin en yakın tam sayıya yuvarlanmasına neden olur. –

cevap

620

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

ALTER TABLE tablename MODIFY columnname INTEGER; 

Bu sütunlar bunu bir komut dosyası oluşturabilir veya MySQL istemci GUI

çeşit kullanmak iyi olabilir değiştirmek istediğiniz howmany bağlı verilen sütunda

veri türünü değişecek

+38

Dostu hatırlatma - Sütunlar için varsayılan BOŞLUKTUR, bu nedenle NOT NULL sütununuz varsa, "DEĞİŞTİRME sütun numarası INTEGER NOT NULL" seçeneğini kullanmayı unutmayın, aksi halde sütununuzu NOT NULL - NULL olarak değiştireceksiniz. – Despertar

+0

Tablodaki verileri silecek veya bir şey yeni sütun türüyle ilgili bir şikayette bulunmuyorsa yürütme başarısız olur mu? – EndermanAPM

+1

ALTER TABLE tabename MODIFY sütun adı INTEGER imzasız; <- imzasız yeni sütunu önemsiyorsanız. Benim davamdı. – mircealungu

5

Örneğin, alter table ... change ... yöntemi kullanın:

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) 
39
alter table table_name modify column_name int(5) 
29

Ayrıca bu kullanabilirsiniz:

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

bunu başka bir türle belli türdeki tüm sütunları değiştirmek isterseniz, böyle bir sorgu kullanarak sorgular oluşturabilir:

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

Eğer bit(1) için tinyint(4) sütunları değiştirmek istiyorsanız örneğin, bu gibi ç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 böyle bir sonuç alırsınız:

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 -parametresi ile concat'a kolayca sabitlenmelidir. Ben .. gerekirse o uygulamak için okuyucuya

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

Ör o kadar bırakacağım:

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