Come posso modificare la dimensione della colonna in una tabella mysql?


301

Ho creato una tabella e accidentalmente ho inserito la varcharlunghezza 300anziché 65353. Come posso ripararlo?

Un esempio sarebbe apprezzato.

Risposte:


571

Hai provato questo?

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

Questo cambierà il tipo di col_name inVARCHAR(65353)


14
Ciò mantiene intatti i dati?
Flimm,

1
@Flimm sembra per me.
deed02392,

39
@Flimm - solo un puntatore, se hai un VARCHAR (100) e lo cambi in VARCHAR (50), taglierà tutti i dati esistenti dalle colonne. In base a questa domanda specifica, tuttavia, allargare una colonna non avrà problemi con i dati.
Warren Sergent,

8
@WarrenSergent, testato in 5.7.15, genererà un errore se ci sono valori interessati dalla modifica. Non si troncerà per impostazione predefinita. Dovrai aggiornare in anticipo i valori con un SUBSTR.
Robert T.

1
@animo ha ragione. Guardate questo per una risposta completa stackoverflow.com/a/9611293/1594933
Gontard

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

Devi elencare il nome della colonna due volte, anche se non stai cambiando il suo nome.

Si noti che dopo aver apportato questa modifica, il tipo di dati della colonna sarà MEDIUMTEXT.


Miky D è corretto, il MODIFYcomando può farlo in modo più conciso.


Per quanto riguarda le MEDIUMTEXTcose: una riga di MySQL può contenere solo 65535 byte (senza contare le colonne BLOB / TEXT). Se si tenta di modificare una colonna in modo che sia troppo grande, rendendo la dimensione totale della riga 65536 o superiore, è possibile che venga visualizzato un errore. Se provi a dichiarare una colonna di VARCHAR(65536)allora è troppo grande anche se è l'unica colonna in quella tabella, quindi MySQL la converte automaticamente in un MEDIUMTEXTtipo di dati.

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)

Ho letto male la tua domanda originale, che vuoi VARCHAR(65353), che MySQL può fare, a condizione che la dimensione della colonna sommata con le altre colonne nella tabella non superi 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, ragazzi, avete la stessa risposta. cosa significa che il tipo di dati della colonna sarà MEDIUMTEXT? thx
vehomzzz,

3
@Bill: CHANGE viene generalmente utilizzato per rinominare una colonna e modificarne il tipo di dati. MODIFICA cambierà solo il tipo di dati della colonna
Mike Dinescu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.