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.
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.
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
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
¿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
ALTER TABLE tablename MODIFY columnname INTEGER unsigned; <- si le importa que la nueva columna no esté firmada. Fue mi caso – mircealungu
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)
alter table table_name modify column_name int(5)
Puede también utilizar esto:
ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)
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 ..
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Ex:
Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
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. –