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

264

MySQL 5.0.45

Каков синтаксис, чтобы изменить таблицу, чтобы позволить столбцу быть нулевым, а не что-то неправильное:

ALTER mytable MODIFY mycolumn varchar(255) null;

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

  • 0
    столбец не является уникальным или что-то подобное
Теги:
syntax

5 ответов

398
Лучший ответ

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

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

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

  • 12
    Есть крайний случай, который является типом TIMESTAMP , который в зависимости от вашей версии MySQL и конфигурации может быть NOT NULL указав NULL как предложено @ConroyP, более правильно.
  • 1
    Это не сработало для меня! Колонка не изменилась. Возможно, потому что у меня было ограничение на другую таблицу, где использовался столбец (когда не ноль).
130

Синтаксическая ошибка вызвана отсутствующей "таблицей" в запросе

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;
  • 22
    Это на самом деле правильный ответ - хотя предложение NULL не требуется, нет ничего плохого в его предоставлении. Отсутствие TABLE в операторе ALTER TABLE стало настоящей проблемой.
  • 2
    Это «более правильный» ответ.
Показать ещё 2 комментария
15

Мое решение:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Например:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;
4

При некоторых обстоятельствах (если вы получаете "ERROR 1064 (42000): у вас есть ошибка в синтаксисе SQL;..." ) вам нужно сделать

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню