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.

zmf
sumber
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.

Daniel Spiewak
sumber
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;
ConroyP
sumber
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;
Krishnrohit
sumber
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);
Gerald Senarclens de Grancy
sumber
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.

Hmerman6006
sumber
-5

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

Jan Nejedly
sumber
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