it-swarm.com.de

Wie kann ich die Größe einer Spalte in einer MySQL-Tabelle ändern?

Ich habe eine Tabelle erstellt und versehentlich varchar Länge als 300 anstatt 65353. Wie kann ich das beheben?

Ein Beispiel wäre wünschenswert.

292
vehomzzz

Hast du das versucht?

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

Dadurch wird der Typ von col_name in VARCHAR(65353) geändert.

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

Sie müssen den Spaltennamen zweimal auflisten, auch wenn Sie den Namen nicht ändern.

Beachten Sie, dass der Datentyp der Spalte nach dieser Änderung MEDIUMTEXT ist.


Miky D ist richtig, der Befehl MODIFY kann dies präziser ausführen.


Was MEDIUMTEXT betrifft: Eine MySQL-Zeile kann nur 65535 Byte umfassen (ohne BLOB/TEXT-Spalten). Wenn Sie versuchen, eine Spalte so zu ändern, dass sie zu groß ist und die Gesamtgröße der Zeile 65536 oder höher ist, wird möglicherweise eine Fehlermeldung angezeigt. Wenn Sie versuchen, eine Spalte von VARCHAR(65536) zu deklarieren, ist sie zu groß, auch wenn sie die einzige Spalte in dieser Tabelle ist, und MySQL konvertiert sie automatisch in einen MEDIUMTEXT -Datentyp.

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)

Ich habe Ihre ursprüngliche Frage falsch verstanden. Sie möchten VARCHAR(65353), was MySQL kann, solange die mit den anderen Spalten in der Tabelle summierte Spaltengröße 65535 nicht überschreitet.

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