Come posso cambiare il tipo di dati per una colonna in MySQL?


489

Voglio cambiare il tipo di dati di più colonne da float a int. Qual è il modo più semplice per farlo?

Non ci sono ancora dati di cui preoccuparsi.


6
Solo per renderlo esplicito, le risposte di seguito (usando ALTER TABLE) funzioneranno, anche se la colonna contiene già dei dati. Tuttavia, la conversione di una colonna float in una colonna intera farà sì che tutti i valori non interi in essa contenuti vengano arrotondati al numero intero più vicino.
Ilmari Karonen,

Risposte:


898

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

ALTER TABLE tablename MODIFY columnname INTEGER;

Questo cambierà il tipo di dati di una determinata colonna

A seconda di quante colonne desideri modificare, potrebbe essere meglio generare uno script o utilizzare un qualche tipo di interfaccia grafica client mysql


88
Promemoria amichevole: il valore predefinito per le colonne è NULLABILE, quindi se si dispone di una colonna NOT NULL, non dimenticare di utilizzare "MODIFY nome colonna INTEGER NOT NULL" oppure modificare la colonna da NOT NULL a NULL.
Despertar,

3
Modifica tabella eliminerà i dati sulla tabella o non riuscirà nell'esecuzione se qualcosa non si lamenta con il nuovo tipo di colonna?
EndermanAPM

1
ALTER TABLE tablename MODIFY nome colonna INTEGER unsigned; <- se ti interessa che la nuova colonna non sia firmata. Era il mio caso.
mircealungu,

Penso che l'avvertimento di @Despertars potrebbe anche essere rilevante per mantenere le specifiche di CHARSET o COLLATE.
Halvor Holsten Strand,

44
alter table table_name modify column_name int(5)

37

Puoi anche usare questo:

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

12

Se si desidera modificare tutte le colonne di un determinato tipo in un altro tipo, è possibile generare query utilizzando una query come questa:

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

Ad esempio, se si desidera modificare le colonne da tinyint(4)a bit(1), eseguirlo in questo modo:

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

e ottieni un output come questo:

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;

!! Non mantiene vincoli univoci, ma dovrebbe essere facilmente risolto con un altro ifparametro a concat. Lascio al lettore la possibilità di implementarlo se necessario ..


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

Es:

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

5

Si utilizza il alter table ... change ...metodo, ad esempio:

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)

Credo che sia MODIFICARE piuttosto che cambiare, ma forse entrambi funzionano.
Zsolt Szilagyi,

4

Per modificare il tipo di dati di colonna ci sono cambiamenti metodo e di modifica metodo

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Per modificare il nome del campo utilizzare anche il metodo di modifica

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);


0

Se vuoi modificare i dettagli della colonna aggiungi un commento, usa questo

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.