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


489

Quiero cambiar el tipo de datos de varias columnas de flotante a int. ¿Cuál es la forma más sencilla de hacer esto?

No hay datos de los que preocuparse, todavía.


66
Solo para hacer esto explícito, las respuestas a continuación (usando ALTER TABLE) funcionarán, de hecho, incluso si la columna ya contiene datos. Sin embargo, la conversión de una columna flotante en una columna entera hará que los valores no enteros se redondeen al entero más cercano.
Ilmari Karonen

Respuestas:


898

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, sería mejor generar un script o utilizar algún tipo de GUI de cliente mysql


88
Recordatorio amigable: el valor predeterminado para las columnas es NULLABLE, por lo que si tiene una columna NOT NULL, no olvide usar "MODIFY columnname INTEGER NOT NULL" o de lo contrario cambiará su columna de NOT NULL a NULL.
Despertar

3
¿Alterar la tabla eliminará los datos de la tabla o fallará en la ejecución si algo no está relacionado con el nuevo tipo de columna?
EndermanAPM

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

Creo que la advertencia de @Despertars también podría ser relevante para mantener las especificaciones de CHARSET o COLLATE.
Halvor Holsten Strand

44
alter table table_name modify column_name int(5)

37

También puedes usar esto:

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

12

Si desea cambiar todas las columnas de un determinado tipo a otro tipo, 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), 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 arreglarse fácilmente con otro ifparámetro para concat. Dejaré que el lector implemente eso si es necesario.


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

Ej:

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

5

Utiliza el alter table ... change ...método, 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)

Creo que es MODIFICAR en lugar de cambiar, pero tal vez ambos funcionen.
Zsolt Szilagyi

4

Para cambiar el tipo de datos de la columna, hay un método de cambio y un método de modificación

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Para cambiar el nombre del campo también use el método de cambio

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);


0

Si desea modificar los detalles de la columna, agregue un comentario, use esto

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.