¿Cómo cambio el tipo de datos de una columna en MySQL?
Quiero cambiar el tipo de datos de varias columnas de float a int. ¿Cuál es la forma más sencilla de hacer esto?
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 cambiará el tipo de datos de la columna dada.
Dependiendo de cuántas columnas desee modificar, podría ser mejor generar un script o utilizar algún tipo de GUI del cliente MySQL.
alter table table_name modify column_name int(5)
También puedes usar esto:
ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)
Si desea cambiar todas las columnas de un determinado tipo a otro tipo, puede generar consultas usando 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)
, ejecútelo 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 solucionarse fácilmente con otro if
parámetro -a concat
. Dejaré que el lector lo implemente si es necesario.