Come posso modificare una colonna MySQL per consentire NULL?


396

MySQL 5.0.45

Qual è la sintassi per modificare una tabella per consentire a una colonna di essere nulla, in alternativa cosa c'è di sbagliato in questo:

ALTER mytable MODIFY mycolumn varchar(255) null;

Ho interpretato il manuale come appena eseguito quanto sopra e avrebbe ricreato la colonna, questa volta permettendo null. Il server mi sta dicendo che ho errori sintattici. Semplicemente non li vedo.


la colonna non è unica o altro del genere
zmf

Risposte:


600

Si desidera quanto segue:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Le colonne sono nullable per impostazione predefinita. Finché la colonna non è dichiarata UNIQUEo NOT NULL, non dovrebbero esserci problemi.


14
C'è un caso limite di questo TIMESTAMPtipo, che a seconda della versione e della configurazione di MySQL può essere NOT NULLspecificato NULLcome suggerito da @ConroyP è più corretto.
Matthew Buckett,

1
Questo non ha funzionato per me! La colonna non è cambiata. Forse perché avevo un vincolo a un'altra tabella in cui veniva utilizzata la colonna (quando non null).
Rocologo,

251

L'errore di sintassi è causato da una "tabella" mancante nella query

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
Questa è in realtà la risposta corretta - anche se la clausola NULL non è richiesta, non c'è nulla di sbagliato nel fornirla. La TABELLA mancante dall'istruzione ALTER TABELLA era il vero problema.
SamStephens,

@SamStephens e Xofo: c'è una domanda principale e secondaria ("alternativamente"). Questa è la risposta corretta alla domanda secondaria mentre la risposta accettata è la risposta corretta a quella principale.
jdunk,

@SamStephens Solo perché non c'è niente di sbagliato nel fornire NULL, non rende questa risposta più "corretta" della risposta accettata? Sapere che le colonne sono nullable per impostazione predefinita (come menzionato nella risposta accettata) è utile per quanto riguarda questa particolare domanda.
rybo111,

OP non sa perché la loro affermazione non ha funzionato. Questa risposta spiega perché.
SamStephens,

28

La mia soluzione:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Per esempio:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

7

In alcune circostanze (se ricevi "ERRORE 1064 (42000): hai un errore nella sintassi SQL; ...") devi fare

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255);

3

La mia soluzione è la stessa di @Krishnrohit:

ALTER TABLE `table` CHANGE `column_current_name` `new_column_name` DATETIME NULL;

In realtà ho impostato la colonna come NOT NULLma con la query sopra è stata modificata NULL.

PS Conosco questo vecchio thread, ma nessuno sembra riconoscere che CHANGEsia anche corretto.


-5

Uso: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
Sarebbe meglio se la tua risposta fornisse un valore aggiuntivo rispetto alle altre risposte. In questo caso, la tua risposta non fornisce un valore aggiuntivo, poiché Daniel Spiewak ha già pubblicato quella soluzione. Se una risposta precedente ti è stata utile, dovresti votarla una volta che hai abbastanza reputazione
Luís Cruz
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.