321 votes

Comment modifier la taille d'une colonne dans une table MySQL ?

J'ai créé une table et j'ai accidentellement mis varchar longueur comme 300 au lieu de 65353 . Comment puis-je réparer cela ?

Un exemple serait apprécié.

603voto

Miky Dinescu Points 22380

Avez-vous essayé ?

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

Cela modifiera le nom_col Le type de l'utilisateur est VARCHAR(65353)

0 votes

Heureux d'aider. @Bill a suggéré d'utiliser CHANGE au lieu de MODIFY, ce qui fonctionnera, mais CHANGE renomme également la colonne et vous devez donc mettre le nom de la colonne deux fois

18 votes

Cela permet-il de conserver les données intactes ?

1 votes

@Flimm semble le faire pour moi.

27voto

Bill Karwin Points 204877
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

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

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


Miky D a raison, le MODIFY La commande peut faire cela de manière plus concise.


Re le MEDIUMTEXT chose : une ligne MySQL ne peut contenir que 65535 octets (sans compter les colonnes BLOB/TEXT). Si vous essayez de modifier une colonne pour qu'elle soit trop grande, rendant la taille totale de la ligne égale ou supérieure à 65536, vous risquez d'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 une colonne MEDIUMTEXT type 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 interprété votre question initiale, vous voulez VARCHAR(65353) MySQL peut le faire, tant que la taille de cette colonne, additionnée aux autres colonnes de la table, 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

0 votes

+1 vous avez la même réponse. que signifie le type de données de la colonne sera MEDIUMTEXT ? thx

4 votes

@Bill : CHANGE est généralement utilisé pour renommer une colonne et changer son type de données. MODIFY ne change que le type de données de la colonne.

0voto

Nick Gotch Points 2819

ALTER TABLE tablename CHANGE columnname VARCHAR(65536) ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X