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.

Respostas:


571

Você já tentou isso?

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

Isso mudará o tipo do col_name paraVARCHAR(65353)


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

+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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.