2008-10-17 13 views
288

MySQL 5.0.45Jak zmodyfikować kolumnę MySQL, aby zezwolić na NULL?

Jaka jest składnia aby zmienić tabelę w celu umożliwienia kolumna być null, na przemian, co jest złego w tym:

ALTER mytable MODIFY mycolumn varchar(255) null; 

ja interpretować instrukcję jak tylko uruchomić go powyżej i odtworzy kolumnę, tym razem dopuszczając wartość null. Serwer mówi mi, że mam błędy składniowe. Po prostu ich nie widzę.

+0

kolumna nie jest unikatowy lub cokolwiek innego jak ten – zmf

Odpowiedz

421

Chcesz następujące:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255); 

Kolumny są pustych domyślnie. Dopóki kolumna nie zostanie zadeklarowana jako UNIQUE lub NOT NULL, nie powinno być żadnych problemów.

+9

Tam jest przypadek krawędź, która jest 'typ TIMESTAMP', który w zależności od wersji MySQL i config może być' NIE NULL' określając 'NULL' zgodnie z sugestią @ConroyP jest bardziej poprawne. –

+0

To nie działa dla mnie! Kolumna się nie zmieniła. Może dlatego, że miałem ograniczenie do innej tabeli, w której użyto kolumny (jeśli nie jest ona zerowa). – Rocologo

150

Twój błąd składni jest spowodowane brakującym „stół” w zapytaniu

ALTER TABLE mytable MODIFY mycolumn varchar(255) null; 
+14

To jest właściwie poprawna odpowiedź - chociaż klauzula NULL nie jest wymagana, nie ma nic złego w jej dostarczaniu. Brakująca tabela z instrukcji ALTER TABLE była prawdziwym problemem. – SamStephens

+0

To jest "bardziej poprawna" odpowiedź. – Xofo

+0

@SamStephens and Xofo: Istnieje pytanie pierwotne i wtórne ("naprzemiennie"). Jest to poprawna odpowiedź na pytanie drugorzędne, podczas gdy zaakceptowana odpowiedź jest poprawną odpowiedzią na pytanie pierwsze. – jdunk

4

W pewnych okolicznościach (jeśli się „ERROR 1064 (42000): masz błąd w składni SQL; .. . ") trzeba zrobić

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255); 
17

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; 
-4

Zastosowanie: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

+12

Byłoby lepiej, gdyby twoja odpowiedź dostarczyła dodatkowej wartości w stosunku do innych odpowiedzi. W tym 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ś [głosować] (http://stackoverflow.com/help/privileges/vote-up), gdy masz już wystarczająco [reputation] (http://stackoverflow.com/help/whats-reputation) –