Como modifico uma coluna do MySQL para permitir NULL?

396

MySQL 5.0.45

Qual é a sintaxe para alterar uma tabela para permitir que uma coluna seja nula? Como alternativa, o que há de errado nisso:

ALTER mytable MODIFY mycolumn varchar(255) null;

Interpretei o manual como apenas execute o procedimento acima e ele recriaria a coluna, desta vez permitindo nulo. O servidor está me dizendo que tenho erros sintáticos. Eu simplesmente não os vejo.

zmf
fonte
coluna não é único ou qualquer outra coisa assim
ZMF

Respostas:

600

Você deseja o seguinte:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

As colunas são anuláveis ​​por padrão. Contanto que a coluna não seja declarada UNIQUEou NOT NULLnão haja problemas.

Daniel Spiewak
fonte
14
Há um caso de borda que é o TIMESTAMPtipo que, dependendo da sua versão e configuração do MySQL, pode ser NOT NULLespecificado NULLcomo sugerido por @ConroyP, é mais correto.
Matthew Buckett
11
Isto não funcionou para mim! A coluna não mudou. Talvez porque eu tivesse uma restrição para outra tabela onde a coluna foi usada (quando não nula).
Rocologo
251

Seu erro de sintaxe é causado por uma "tabela" ausente na consulta

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;
ConroyP
fonte
26
Esta é realmente a resposta correta - embora a cláusula NULL não seja necessária, não há nada errado em fornecê-la. A tabela ausente da instrução ALTER TABLE era o problema real.
SamStephens
@ SamStephens e Xofo: Existe uma pergunta primária e secundária ("alternadamente"). Esta é a resposta correta para a questão secundária, enquanto a resposta aceita é a resposta correta para a principal.
Jdunk # 11/16
@SamStephens Só porque não há nada errado em fornecer NULL, isso não torna essa resposta mais "correta" do que a resposta aceita? Saber que as colunas são anuláveis ​​por padrão (conforme mencionado na resposta aceita) é útil no que diz respeito a essa pergunta em particular.
rybo111
O OP não sabe por que a declaração deles não funcionou. Esta resposta explica o porquê.
SamStephens
28

Minha solução:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Por exemplo:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;
Krishnrohit
fonte
7

Sob algumas circunstâncias (se você receber "ERRO 1064 (42000): você tem um erro na sintaxe SQL; ..."), é necessário executar

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255);
Gerald Senarclens de Grancy
fonte
3

Minha solução é a mesma que @Krishnrohit:

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

Na verdade, eu tinha a coluna definida como NOT NULLmas com a consulta acima foi alterada para NULL.

PS: Eu sei que isso é um tópico antigo, mas ninguém parece reconhecer que CHANGEtambém está correto.

Hmerman6006
fonte
-5

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

Jan Nejedly
fonte
18
Seria melhor se sua resposta fornecesse valor adicional sobre as outras respostas. Nesse caso, sua resposta não fornece valor adicional, pois Daniel Spiewak já postou essa solução. Se a resposta anterior foi útil para você, você deve votar-lo uma vez que você tem bastante reputação
Luís Cruz