2009-08-31 20 views
312

Quiero cambiar el tipo de datos de varias columnas de float a int. ¿Cuál es la forma más simple de hacer esto?¿Cómo cambio el tipo de datos para una columna en MySQL?

Aún no hay datos de los que preocuparse.

+3

sólo para hacer esta explícita, las respuestas a continuación (usando 'ALTER TABLE') será , de hecho, funciona incluso si la columna ya contiene datos. Sin embargo, al convertir una columna flotante en una columna entera, todos los valores no enteros se redondearán al entero más cercano. –

Respuesta

620

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

ALTER TABLE tablename MODIFY columnname INTEGER; 

Esto va a cambiar el tipo de datos determinado columna

Dependiendo de howmany columnas que desea modificar podría ser mejor para generar una secuencia de comandos, o utilizar algún tipo de interfaz gráfica de usuario del cliente de MySQL

+38

Recordatorio amistoso: el valor predeterminado para las columnas es NULLABLE, por lo tanto, si tiene una columna NOT NULL, no olvide utilizar "MODIFY columnname INTEGER NOT NULL" o bien, podrá cambiar su columna de NOT NULL a NULL. – Despertar

+0

¿Alterará la tabla para eliminar los datos de la tabla o fallará en la ejecución si algo no es una queja con el nuevo tipo de columna? – EndermanAPM

+1

ALTER TABLE tablename MODIFY columnname INTEGER unsigned; <- si le importa que la nueva columna no esté firmada. Fue mi caso – mircealungu

5

Se utiliza el método de alter table ... change ..., por ejemplo:

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

Puede también utilizar esto:

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

Si desea cambiar todas las columnas de un tipo determinado de otro tipo, se puede generar consultas utilizando una consulta como esta:

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

Por ejemplo, si desea cambiar las columnas de tinyint(4) a bit(1), ejecutarlo así:

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

y obtener una salida como esta:

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; 

!! No mantiene restricciones únicas, pero debe ser fácilmente reparado con otro parámetro if a concat. Lo dejo al lector para aplicar esa si es necesario ..

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

Ex:

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