Como posso modificar o tamanho da coluna em uma tabela mysql?

301

Eu criei uma tabela e acidentalmente coloquei o varcharcomprimento em 300vez de 65353. Como posso consertar isso?

Um exemplo seria apreciado.

vehomzzz
fonte

Respostas:

571

Você já tentou isso?

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

Isso mudará o tipo do col_name paraVARCHAR(65353)

Mike Dinescu
fonte
14
Isso mantém os dados intactos?
Flimm
1
@Flimm parece para mim.
deed02392
39
@ Limlim - apenas um ponteiro, se você tiver um VARCHAR (100) e alterá-lo para VARCHAR (50), ele cortará todos os dados existentes das colunas. Porém, conforme essa pergunta específica, aumentar uma coluna não terá problemas com os dados.
Warren Sergent
8
O @WarrenSergent, testado em 5.7.15, emitirá um erro se houver valores afetados pela alteração. Por padrão, não será truncado. Você precisará atualizar os valores antecipadamente com um SUBSTR.
Robert T.
1
@animo está certo. Veja aqui uma resposta completa stackoverflow.com/a/9611293/1594933
gontard 10/11/16
26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

Você precisa listar o nome da coluna duas vezes, mesmo que não esteja mudando o nome.

Observe que, depois de fazer essa alteração, o tipo de dados da coluna será MEDIUMTEXT.


Miky D está correto, o MODIFYcomando pode fazer isso de forma mais concisa.


A MEDIUMTEXTquestão: uma linha do MySQL pode ter apenas 65535 bytes (sem contar as colunas BLOB / TEXT). Se você tentar alterar uma coluna para ser muito grande, tornando o tamanho total da linha 65536 ou superior, poderá ocorrer um erro. Se você tentar declarar uma coluna VARCHAR(65536)dela, ela será muito grande, mesmo que seja a única coluna nessa tabela, para que o MySQL a converta automaticamente em um MEDIUMTEXTtipo de dados.

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)

Você leu errado sua pergunta original VARCHAR(65353), o que o MySQL pode fazer, desde que o tamanho da coluna somado às outras colunas da tabela não exceda 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
Bill Karwin
fonte
+1, vocês têm a mesma resposta. o que significa que o tipo de dados da coluna será MEDIUMTEXT? thx
vehomzzz
3
@ Bill: CHANGE geralmente é usado para renomear uma coluna e alterar seu tipo de dados. Modificar apenas irá alterar o tipo de dados da coluna
Mike Dinescu