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.


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.


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;

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;

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);

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.


-5

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.