Bagaimana cara memodifikasi kolom MySQL untuk mengizinkan NULL?


396

MySQL 5.0.45

Apa sintaks untuk mengubah tabel agar kolom menjadi nol, atau apa yang salah dengan ini:

ALTER mytable MODIFY mycolumn varchar(255) null;

Saya menafsirkan manual sebagai hanya menjalankan di atas dan itu akan membuat ulang kolom, kali ini memungkinkan nol. Server memberi tahu saya bahwa saya memiliki kesalahan sintaksis. Aku hanya tidak melihat mereka.


Kolom tidak unik atau hal lain seperti itu
zmf

Jawaban:


600

Anda menginginkan yang berikut:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Kolom dapat dibatalkan secara default. Selama kolom tidak dinyatakan UNIQUEatau NOT NULL, seharusnya tidak ada masalah.


14
Ada kasus tepi yang merupakan TIMESTAMPtipe, yang tergantung pada versi MySQL Anda dan konfigurasi dapat NOT NULLmenentukan NULLseperti yang disarankan oleh @ConroyP lebih benar.
Matthew Buckett

1
Ini tidak berhasil untuk saya! Kolom tidak berubah. Mungkin karena saya memiliki batasan untuk tabel lain di mana kolom itu digunakan (ketika tidak nol).
Rocologo

251

Kesalahan sintaksis Anda disebabkan oleh "tabel" yang hilang dalam kueri

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
Ini sebenarnya jawaban yang benar - sementara klausa NULL tidak diperlukan, tidak ada yang salah dengan memberikannya. TABEL yang hilang dari pernyataan ALTER TABLE adalah masalah sebenarnya.
SamStephens

@SamStephens dan Xofo: Ada pertanyaan primer dan sekunder ("bergantian"). Ini adalah jawaban yang benar untuk pertanyaan sekunder sementara jawaban yang diterima adalah jawaban yang benar untuk pertanyaan utama.
jdunk

@SamStephens Hanya karena tidak ada yang salah dengan menyediakan NULL, itu tidak membuat jawaban ini lebih "benar" daripada jawaban yang diterima? Mengetahui bahwa kolom dapat dibatalkan secara default (seperti yang disebutkan dalam jawaban yang diterima) sangat membantu dalam hal pertanyaan khusus ini.
rybo111

OP tidak tahu mengapa pernyataan mereka tidak berhasil. Jawaban ini menjelaskan alasannya.
SamStephens

28

Solusi saya:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Sebagai contoh:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

7

Dalam beberapa keadaan (jika Anda mendapatkan "ERROR 1064 (42000): Anda memiliki kesalahan dalam sintaks SQL Anda; ...") yang perlu Anda lakukan

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

3

Solusi saya sama dengan @ Krishnrohit:

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

Saya sebenarnya telah mengatur kolom NOT NULLtetapi dengan permintaan di atas itu diubah menjadi NULL.

PS Saya tahu ini utas lama tapi sepertinya tidak ada yang mengakui itu CHANGEjuga benar.


-5

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


18
Akan lebih baik jika jawaban Anda memberikan nilai tambahan di atas jawaban lainnya. Dalam hal ini, jawaban Anda tidak memberikan nilai tambahan, karena Daniel Spiewak sudah memposting solusi itu. Jika jawaban sebelumnya bermanfaat bagi Anda, Anda harus memilihnya setelah Anda memiliki reputasi yang
Luís Cruz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.