🧚 ¡Oye! Beekeeper Studio es una GUI de bases de datos rápida, moderna y de código abierto Descarga
28 de mayo de 2024 Por Matthew Rathbone

Cambiar el tipo de una columna en MySQL es una tarea común cuando trabajas con bases de datos. Quizá necesites cambiar el tipo de una columna para adaptarte a nuevos requisitos de datos o para optimizar el rendimiento. Este tutorial te explica cómo cambiar el tipo de columna con la sentencia ALTER TABLE, con ejemplos prácticos.

Cómo funciona la sentencia ALTER TABLE

La sentencia ALTER TABLE se usa para modificar la estructura de una tabla existente. Permite agregar, eliminar o cambiar columnas e índices. Para cambiar el tipo de una columna, la sintaxis básica es:

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;

Veamos la sintaxis por partes:

  • table_name: el nombre de la tabla que contiene la columna que quieres modificar.
  • column_name: el nombre de la columna que quieres modificar.
  • new_data_type: el nuevo tipo de dato que quieres asignar a la columna.

Ejemplo: cambiar el tipo de columna en MySQL

Imagina una tabla llamada users con la siguiente estructura:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    age INT
);

Puedes revisar la estructura inicial con:

DESCRIBE users;

Resultado esperado:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | YES  |     | NULL    |                |
| age      | int         | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Cambiar el tipo de la columna age

Supón que quieres cambiar la columna age de INT a TINYINT porque el rango de edades es pequeño y quieres ahorrar espacio.

ALTER TABLE users MODIFY COLUMN age TINYINT;

Al ejecutar el comando anterior, la columna age cambiará a TINYINT. Verifica el cambio:

DESCRIBE users;

Resultado esperado:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | YES  |     | NULL    |                |
| age      | tinyint     | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Ten en cuenta que TINYINT puede almacenar un rango de números más pequeño que INT. Como te imaginarás, esto puede causar problemas al convertir los datos de la tabla. Explico las implicaciones en la sección Conversion Issues más abajo.

Cambiar el tipo de la columna username

Ahora, cambiemos la columna username de VARCHAR(50) a VARCHAR(100) para permitir nombres de usuario más largos.

ALTER TABLE users MODIFY COLUMN username VARCHAR(100);

Verifica el cambio:

DESCRIBE users;

Resultado esperado:

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| username | varchar(100) | YES  |     | NULL    |                |
| age      | tinyint      | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

Cómo manejar problemas de conversión de datos

Al cambiar el tipo de una columna, podrías tener problemas si los datos existentes son incompatibles con el nuevo tipo. MySQL intentará convertir los datos existentes, pero si un valor no se puede convertir, podría quedar como NULL o truncarse.

Ejemplo: truncamiento de datos - INT a TINYINT

En nuestro ejemplo de INT a TINYINT existe el riesgo de truncamiento de datos, porque TINYINT no admite el mismo rango de valores que INT.

  • INT puede almacenar valores de -2,147,483,648 a 2,147,483,647 (con signo) o de 0 a 4,294,967,295 (sin signo).
  • TINYINT puede almacenar valores de -128 a 127 (con signo) o de 0 a 255 (sin signo).

Esto es lo que pasa durante la conversión:

a. Si los valores INT de la columna están dentro del rango que TINYINT puede almacenar, se convertirán sin problemas.
b. Si los valores INT exceden el rango de TINYINT, se truncarán para ajustarse al rango de TINYINT. Por ejemplo, si el valor INT es 300, se truncará a 127 en un TINYINT con signo o a 255 en un TINYINT sin signo.

MySQL podría generar advertencias o errores durante la conversión si los datos exceden los límites del nuevo tipo de dato, según la configuración del modo SQL.

Ejemplo: cambiar a un tipo no compatible

Considera este escenario:

ALTER TABLE users MODIFY COLUMN age CHAR(3);

Esto cambia la columna age a CHAR(3). Sin embargo, si alguna edad excede 999, se truncará a los primeros tres caracteres. Asegúrate siempre de que el nuevo tipo pueda manejar los datos existentes para no perder información.

Conclusión

Para cambiar el tipo de una columna en MySQL se usa la sentencia ALTER TABLE con la cláusula MODIFY COLUMN. Verifica siempre los cambios y ten cuidado con los problemas de conversión de datos. Este tutorial te mostró cómo hacerlo con ejemplos prácticos para que puedas aplicarlo con confianza en tus proyectos.

Al entender y usar la sentencia ALTER TABLE, puedes administrar y optimizar eficazmente las estructuras de tus bases de datos en MySQL.

Beekeeper Studio es un cliente de bases de datos gratuito y de código abierto

La mejor herramienta de consultas y edición de SQL que he usado. Tiene todo lo que necesito para administrar mi base de datos. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio es rápido, intuitivo y fácil de usar. Es compatible con muchísimas bases de datos y funciona de maravilla en Windows, Mac y Linux.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

Lo que dicen los usuarios de Beekeeper Studio

★★★★★
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con MySQL. Es rápido, intuitivo y hace que trabajar con bases de datos vuelva a ser agradable."
— Alex K., desarrollador de bases de datos
★★★★★
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."
— Sarah M., ingeniera Full Stack

¿Listo para mejorar tu flujo de trabajo con MySQL?

download Descarga gratis