Як змінити стовпчик MySQL, щоб дозволити NULL?


396

MySQL 5.0.45

Що є синтаксисом для зміни таблиці, щоб стовпець міг бути нульовим, по черзі, що з цим не так:

ALTER mytable MODIFY mycolumn varchar(255) null;

Я інтерпретував посібник як тільки запуск вищевказаного, і він відтворить стовпець, на цей раз дозволяючи null. Сервер каже мені, що у мене є синтаксичні помилки. Я просто не бачу їх.


стовпчик не унікальний чи щось інше подібне
zmf

Відповіді:


600

Вам потрібно наступне:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Стовпці за замовчуванням є нульовими. Поки стовпець не оголошено UNIQUEабо NOT NULLне повинно виникнути проблем.


14
Існує TIMESTAMPтип краєвого типу, який залежно від вашої версії та конфігурації MySQL може NOT NULLвказувати, NULLяк правильніше запропонувати @ConroyP.
Меттью Бакетт

1
Це для мене не вийшло! Стовпець не змінювався. Можливо тому, що у мене було обмеження до іншої таблиці, де стовпець використовувався (коли не нульовий).
Rocologo

251

Ваша синтаксична помилка викликана відсутністю у запиті "таблиці"

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
Це насправді правильна відповідь - хоча пункт NULL не потрібен, в його забезпеченні немає нічого поганого. Справжньою проблемою була відсутня таблиця з оператора 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;

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це також правильно.


-5

Використання: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
Було б краще, якби ваша відповідь надавала додаткового значення поверх інших відповідей. У цьому випадку ваша відповідь не надає додаткової цінності, оскільки Даніель Шпієвак вже розмістив це рішення. Якщо попередня відповідь була для вас корисною, ви повинні проголосувати за неї, коли у вас буде достатня репутація
Luís Cruz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.