Chcę zmienić typ danych wielu kolumn z float na int. Jaki jest najprostszy sposób to zrobić?Jak zmienić typ danych dla kolumny w MySQL?
Nie ma jeszcze żadnych danych, o które trzeba się martwić.
Chcę zmienić typ danych wielu kolumn z float na int. Jaki jest najprostszy sposób to zrobić?Jak zmienić typ danych dla kolumny w MySQL?
Nie ma jeszcze żadnych danych, o które trzeba się martwić.
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
ALTER TABLE tablename MODIFY columnname INTEGER;
Będzie to zmienić typ danych danej kolumnie
zależności howmany kolumny chcesz zmodyfikować to może być najlepiej wygenerować skrypt, lub użyć jakiegoś mysql klienta GUI
Przyjazne przypomnienie - domyślne dla kolumn jest NIESTABILNE, więc jeśli masz kolumnę NOT NULL, nie zapomnij użyć "MODIFY columnname INTEGER NOT NULL" lub zmienisz swoją kolumnę z NOT NULL na NULL. – Despertar
Czy zmienisz tabelę, usuwając dane z tabeli lub nie wykonując polecenia, jeśli coś nie jest reklamacją z nowym typem kolumny? – EndermanAPM
ALTER TABLE tablename MODIFY nazwa kolumny INTEGER unsigned; <- jeśli zależy Ci na tym, aby nowa kolumna była niepodpisana. To była moja sprawa. – mircealungu
użyć metody alter table ... change ...
, na przykład:
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)
alter table table_name modify column_name int(5)
Można również użyć tego:
ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)
Jeśli chcesz zmienić wszystkie kolumny pewnego typu na inny typ, można wygenerować zapytania przy użyciu kwerendy tak:
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>';
Na przykład, jeśli chcesz zmienić kolumny z tinyint(4)
na bit(1)
, uruchom to tak:
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)';
i uzyskaj dane wyjściowe w następujący sposób:
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;
!! Nie zachowuje unikalnych ograniczeń, ale powinien być łatwy do naprawienia innym parametrem if
do concat
. Zostawię ją do czytnika do wdrożenia, że w razie potrzeby ..
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Ex:
Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Właśnie zrobić to jednoznaczne, odpowiedzi poniżej (przy użyciu 'ALTER TABLE') będzie w rzeczywistości działa, nawet jeśli kolumna zawiera już dane. Jednak konwersja kolumny zmiennoprzecinkowej na kolumnę całkowitą spowoduje, że wszelkie niecałkowite wartości w niej zostaną zaokrąglone do najbliższej liczby całkowitej. –