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

396

MySQL 5.0.45

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

ALTER mytable MODIFY mycolumn varchar(255) null;

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

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

Ответы:

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;
ConroyP
источник
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;
Krishnrohit
источник
7

При некоторых обстоятельствах (если вы получаете «ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; ...»), вам нужно сделать

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255);
Джеральд Сенаркленс де Гранси
источник
3

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

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

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

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

Hmerman6006
источник
-5

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

Ян Неджедлы
источник
18
Было бы лучше, если бы ваш ответ давал дополнительную ценность поверх других ответов. В этом случае ваш ответ не дает дополнительной ценности, поскольку Даниэль Спивак уже опубликовал это решение. Если предыдущий ответ был вам полезен, вы должны проголосовать за него, как только у вас будет достаточно репутации
Луис Крус