Как изменить столбец MySQL, чтобы разрешить NULL?


396

MySQL 5.0.45

Каков синтаксис для изменения таблицы, чтобы столбец мог быть пустым, или что не так с этим:

ALTER mytable MODIFY mycolumn varchar(255) null;

Я интерпретировал руководство как просто запустив вышеизложенное, и оно воссоздаст столбец, на этот раз допустив ноль. Сервер говорит мне, что у меня есть синтаксические ошибки. Я просто не вижу их.


колонка не уникальна или что-то в этом
роде

Ответы:


600

Вы хотите следующее:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Столбцы обнуляются по умолчанию. Пока столбец не объявлен UNIQUEили NOT NULLне должно быть никаких проблем.


14
Существует крайний случай, который является TIMESTAMPтипом, который в зависимости от вашей версии MySQL и конфигурации может NOT NULLуказывать, NULLкак предложено @ConroyP, более правильно.
Мэтью Бакет

1
Это не сработало для меня! Колонка не изменилась. Возможно, потому что у меня было ограничение на другую таблицу, где использовался столбец (когда не ноль).
Роколог

251

Ваша синтаксическая ошибка вызвана отсутствием "таблицы" в запросе

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
На самом деле это правильный ответ - хотя предложение NULL не требуется, в его предоставлении нет ничего плохого. Отсутствие TABLE в операторе ALTER TABLE было настоящей проблемой.
SamStephens

@SamStephens и Xofo: есть первичный и вторичный («поочередно») вопрос. Это правильный ответ на дополнительный вопрос, в то время как принятый ответ является правильным ответом на основной.
jdunk

@SamStephens Просто потому, что в предоставлении нет ничего плохого NULL, это не делает этот ответ более «правильным», чем принятый ответ? Знание того, что столбцы обнуляются по умолчанию (как упомянуто в принятом ответе), полезно в отношении этого конкретного вопроса.
rybo111

ОП не знает, почему их заявление не сработало. Этот ответ объясняет почему.
SamStephens

28

Мое решение:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Например:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;


3

Мое решение такое же, как @Krishnrohit:

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

Я фактически установил столбец как, NOT NULLно с помощью вышеупомянутого запроса он был изменен наNULL .

PS Я знаю, что это старая тема, но никто, кажется, не признает, что CHANGEэто также правильно.


-5

Использование: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
Было бы лучше, если бы ваш ответ давал дополнительную ценность поверх других ответов. В этом случае ваш ответ не дает дополнительной ценности, поскольку Даниэль Спивак уже опубликовал это решение. Если предыдущий ответ был вам полезен, вы должны проголосовать за него, как только у вас будет достаточно репутации
Луис Крус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.