¿Cómo cambio el tipo de datos de una columna en MySQL?

Resuelto Eric Wilson asked hace 15 años • 9 respuestas

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.

Eric Wilson avatar Aug 31 '09 17:08 Eric Wilson
Aceptado

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.

Yannick Motton avatar Aug 31 '2009 10:08 Yannick Motton
alter table table_name modify column_name int(5)
php avatar Dec 30 '2013 05:12 php

También puedes usar esto:

ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)
Richard avatar Apr 22 '2014 22:04 Richard

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 ifparámetro -a concat. Dejaré que el lector lo implemente si es necesario.

Tobb avatar Nov 17 '2014 16:11 Tobb