Comment puis-je modifier la taille de la colonne dans une table mysql?


301

J'ai créé une table et mis accidentellement la varcharlongueur au 300lieu de 65353. Comment puis-je résoudre ce problème?

Un exemple serait apprécié.

Réponses:


571

Avez-vous essayé cela?

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

Cela changera le type de col_name enVARCHAR(65353)


14
Cela conserve-t-il les données intactes?
Flimm

1
@Flimm semble pour moi.
deed02392

39
@Flimm - juste un pointeur, si vous avez un VARCHAR (100) et que vous le changez en VARCHAR (50), il coupera toutes les données existantes des colonnes. Cependant, conformément à cette question spécifique, l'agrandissement d'une colonne n'aura pas de problème avec les données.
Warren Sergent

8
@WarrenSergent, testé en 5.7.15, il générera une erreur s'il y a des valeurs affectées par le changement. Il ne sera pas tronqué par défaut. Vous devrez mettre à jour les valeurs au préalable avec un SUBSTR.
Robert T.

1
@animo a raison. Regardez ceci pour une réponse complète stackoverflow.com/a/9611293/1594933
gontard

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

Vous devez répertorier le nom de la colonne deux fois, même si vous ne changez pas son nom.

Notez qu'après avoir effectué cette modification, le type de données de la colonne sera MEDIUMTEXT.


Miky D a raison, la MODIFYcommande peut le faire de manière plus concise.


À MEDIUMTEXTpropos: une ligne MySQL ne peut compter que 65 535 octets (sans compter les colonnes BLOB / TEXTE). Si vous essayez de modifier une colonne pour qu'elle soit trop grande, ce qui rend la taille totale de la ligne 65536 ou supérieure, vous pouvez obtenir une erreur. Si vous essayez de déclarer une colonne de VARCHAR(65536)alors elle est trop grande même si c'est la seule colonne de cette table, donc MySQL la convertit automatiquement en un MEDIUMTEXTtype de données.

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)

J'ai mal lu votre question d'origine, vous voulez VARCHAR(65353), ce que MySQL peut faire, tant que la taille de la colonne additionnée aux autres colonnes du tableau ne dépasse pas 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 vous êtes les gars ont la même réponse. qu'est-ce que cela signifie que le type de données de la colonne sera MEDIUMTEXT? thx
vehomzzz

3
@Bill: CHANGE est généralement utilisé pour renommer une colonne et changer son type de données. MODIFY ne changera que le type de données de la colonne
Mike Dinescu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.