web-dev-qa-db-fra.com

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

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

Un exemple serait apprécié.

292
vehomzzz

Avez-vous essayé cela?

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

Ceci changera le type de nom_colonne en VARCHAR(65353)

552
Mike Dinescu
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

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

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


Miky D est correct, la commande MODIFY peut le faire de manière plus concise.


Concernant la chose MEDIUMTEXT: une ligne MySQL ne peut contenir que 65 535 octets (sans compter les colonnes BLOB/TEXT). Si vous essayez de modifier une colonne pour qu'elle soit trop grande et que la taille totale de la ligne soit égale ou supérieure à 65 536, vous risquez d'obtenir une erreur. Si vous essayez de déclarer une colonne de VARCHAR(65536), elle est trop grande, même si c'est la seule colonne de cette table. MySQL la convertit automatiquement en un type de données MEDIUMTEXT.

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 interprété votre question initiale, 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
24
Bill Karwin