¿Cómo puedo modificar el tamaño de la columna en una tabla mysql?


301

He creado una tabla y accidentalmente puse varcharlongitud como en 300lugar de 65353. ¿Cómo puedo arreglar eso?

Un ejemplo sería apreciado.

Respuestas:


571

¿Has probado esto?

ALTER TABLE <table_name> MODIFY <col_name> VARCHAR(65353);

Esto cambiará el tipo de col_name aVARCHAR(65353)


14
¿Esto mantiene los datos intactos?
Flimm

1
@Flimm parece ser para mí.
deed02392

39
@Flimm: solo un puntero, si tiene un VARCHAR (100) y lo cambia a VARCHAR (50), cortará todos los datos existentes de las columnas. Sin embargo, según esta pregunta específica, hacer una columna más grande no tendrá problemas con los datos.
Warren Sergent

8
@WarrenSergent, probado en 5.7.15, arrojará un error si hay valores afectados por el cambio. No se truncará por defecto. Deberá actualizar los valores de antemano con un SUBSTR.
Robert T.

1
@animo tiene razón. Mira esto para obtener una respuesta completa stackoverflow.com/a/9611293/1594933
gontard

26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

Debe enumerar el nombre de la columna dos veces, incluso si no está cambiando su nombre.

Tenga en cuenta que después de realizar este cambio, el tipo de datos de la columna será MEDIUMTEXT.


Miky D es correcto, el MODIFYcomando puede hacer esto de manera más concisa.


Recuerde MEDIUMTEXT: una fila MySQL puede tener solo 65535 bytes (sin contar las columnas BLOB / TEXT). Si intenta cambiar una columna para que sea demasiado grande, haciendo que el tamaño total de la fila sea 65536 o mayor, puede recibir un error. Si intenta declarar una columna, VARCHAR(65536)entonces es demasiado grande, incluso si es la única columna en esa tabla, por lo que MySQL la convierte automáticamente en un MEDIUMTEXTtipo de datos.

mysql> create table foo (str varchar(300));
mysql> alter table foo modify str varchar(65536);
mysql> show create table foo;
CREATE TABLE `foo` (
  `str` mediumtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Leí mal su pregunta original, que quiere VARCHAR(65353), que MySQL puede hacer, siempre que el tamaño de la columna sumado con las otras columnas de la tabla no exceda los 65535.

mysql> create table foo (str1 varchar(300), str2 varchar(300));
mysql> alter table foo modify str2 varchar(65353);
ERROR 1118 (42000): Row size too large. 
The maximum row size for the used table type, not counting BLOBs, is 65535. 
You have to change some columns to TEXT or BLOBs

+1 ustedes son los chicos tienen la misma respuesta. ¿Qué significa que el tipo de datos de la columna será MEDIUMTEXT? thx
vehomzzz

3
@Bill: CHANGE generalmente se usa para cambiar el nombre de una columna y cambiar su tipo de datos. MODIFICAR solo cambiará el tipo de datos de la columna
Mike Dinescu
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.