Jak zmodyfikować kolumnę MySQL, aby umożliwić wartość NULL?

396

MySQL 5.0.45

Jaka jest składnia zmieniająca tabelę, aby kolumna mogła mieć wartość NULL, na przemian, co jest nie tak z tym:

ALTER mytable MODIFY mycolumn varchar(255) null;

Zinterpretowałem instrukcję jako po prostu uruchom powyższą i odtworzy kolumnę, tym razem pozwalając na null. Serwer mówi mi, że mam błędy składniowe. Po prostu ich nie widzę.

zmf
źródło
kolumna nie jest unikalna ani nic podobnego
zmf

Odpowiedzi:

599

Chcesz:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Domyślnie kolumny są zerowane. Dopóki kolumna nie jest zadeklarowana UNIQUElub NOT NULL, nie powinno być żadnych problemów.

Daniel Spiewak
źródło
14
Istnieje przypadek typu Edge TIMESTAMP, który w zależności od wersji MySQL i konfiguracji może być NOT NULLokreślony, NULLjak sugeruje @ConroyP, jest bardziej poprawny.
Matthew Buckett
1
To nie działało dla mnie! Kolumna się nie zmieniła. Może dlatego, że miałem ograniczenie do innej tabeli, w której użyto kolumny (gdy nie jest pusta).
Rocologo,
251

Błąd składniowy jest spowodowany brakującą „tabelą” w zapytaniu

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;
ConroyP
źródło
26
To właściwie poprawna odpowiedź - chociaż klauzula NULL nie jest wymagana, nie ma nic złego w jej dostarczeniu. Prawdziwym problemem był brak tabeli w instrukcji ALTER TABLE.
SamStephens,
@SamStephens i Xofo: Istnieje pytanie podstawowe i wtórne („na przemian”). To jest prawidłowa odpowiedź na pytanie wtórne, podczas gdy zaakceptowana odpowiedź jest poprawna na pytanie podstawowe.
jdunk
@SamStephens Tylko dlatego, że udzielenie nie jest niczym złym NULL, nie czyni tej odpowiedzi bardziej „poprawną” niż odpowiedź zaakceptowana? Wiedza, że ​​kolumny są domyślnie zerowalne (jak wspomniano w zaakceptowanej odpowiedzi), jest pomocna w odniesieniu do tego konkretnego pytania.
rybo111
OP nie wie, dlaczego ich oświadczenie nie działa. Ta odpowiedź wyjaśnia dlaczego.
SamStephens
28

Moje rozwiązanie:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Na przykład:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;
Krishnrohit
źródło
7

W niektórych okolicznościach (jeśli pojawi się komunikat „ERROR 1064 (42000): Wystąpił błąd w składni SQL; ...”), musisz zrobić

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255);
Gerald Senarclens de Grancy
źródło
3

Moje rozwiązanie jest takie samo jak @Krishnrohit:

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

Właściwie ustawiłem kolumnę jako, NOT NULLale przy powyższym zapytaniu została zmieniona na NULL.

PS Wiem, że to stary wątek, ale wydaje się, że nikt nie potwierdza, że CHANGEjest to również poprawne.

Hmerman6006
źródło
-5

Posługiwać się: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Jan Nejedly
źródło
18
Byłoby lepiej, gdyby twoja odpowiedź zawierała dodatkową wartość nad innymi odpowiedziami. W takim przypadku Twoja odpowiedź nie zapewnia dodatkowej wartości, ponieważ Daniel Spiewak już opublikował to rozwiązanie. Jeśli poprzednia odpowiedź była dla ciebie pomocna, powinieneś zagłosować, gdy będziesz mieć wystarczająco dobrą reputację
Luís Cruz,