Bir MySQL sütununu NULL'a izin verecek şekilde nasıl değiştirebilirim?


396

MySQL 5.0.45

Bir sütunun boş olmasına izin vermek için bir tabloyu değiştirecek sözdizimi nedir, alternatif olarak bununla ilgili sorun nedir:

ALTER mytable MODIFY mycolumn varchar(255) null;

Kılavuzu sadece yukarıdakileri çalıştırmak olarak yorumladım ve bu kez null'a izin veren sütunu yeniden oluşturacaktı. Sunucu bana sözdizimsel hatalarım olduğunu söylüyor. Sadece görmüyorum.


sütun benzersiz veya bunun gibi bir şey değil
zmf

Yanıtlar:


600

Aşağıdakileri istiyorsunuz:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Sütunlar varsayılan olarak geçersizdir. Sütun bildirilmediği sürece UNIQUEveya NOT NULLherhangi bir sorun olmamalıdır.


14
TIMESTAMPMySQL sürümünüze ve yapılandırmanıza bağlı olarak @ConroyP tarafından önerildiği gibi NOT NULLbelirleyebilecek olan bir uç durum vardır NULL.
Matthew Buckett

1
Bu benim için işe yaramadı! Sütun değişmedi. Belki de sütunun kullanıldığı başka bir tablo için bir kısıtlama olduğu için (boş değilken).
Rocologo

251

Sözdizimi hatasının nedeni sorgudaki eksik "tablo"

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
Bu aslında doğru cevaptır - NULL cümlesi gerekli olmamakla birlikte, bunu sağlamakla ilgili yanlış bir şey yoktur. ALTER TABLE ifadesindeki eksik TABLE, gerçek sorundu.
SamStephens

@SamStephens ve Xofo: Birincil ve ikincil ("dönüşümlü olarak") bir soru var. Bu ikincil soruya doğru cevap, kabul edilen cevap ise birincil soruya doğru cevaptır.
jdunk

@SamStephens Sağlamanın yanlış bir yanı NULLolmadığı için, bu cevabı kabul edilen cevaptan daha "doğru" yapmıyor mu? Sütunların varsayılan olarak geçersiz kılınabileceğini bilmek (kabul edilen cevapta belirtildiği gibi) bu soruya yardımcı olur.
rybo111

OP ifadelerinin neden çalışmadığını bilmiyor. Bu cevap nedenini açıklıyor.
SamStephens

28

Çözümüm:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Örneğin:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

7

Bazı durumlarda ("HATA 1064 (42000): SQL sözdiziminizde bir hata var; ...") alırsanız yapmanız gerekir

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

3

Çözümüm @Krishnrohit ile aynı:

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

Aslında sütun ayarlanmış vardı NOT NULLama yukarıdaki sorgu ile değiştirildi NULL.

PS Bu eski bir iplik biliyorum ama kimse CHANGEde doğru olduğunu kabul gibi görünüyor .


-5

kullanın: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
Cevabınızın diğer cevapların üstünde ek değer sağlaması daha iyi olur. Bu durumda, Daniel Spiewak bu çözümü zaten gönderdiğinden cevabınız ek değer sağlamaz. Önceki bir yanıt size yardımcı olduysa , yeterli itibara
Luís Cruz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.