Làm cách nào để sửa đổi cột MySQL để cho phép NULL?


396

MySQL 5.0,45

Cú pháp để thay đổi bảng là gì để cho phép một cột là null, thay vào đó là những gì sai với điều này:

ALTER mytable MODIFY mycolumn varchar(255) null;

Tôi đã giải thích hướng dẫn là chỉ chạy ở trên và nó sẽ tạo lại cột, lần này cho phép null. Máy chủ đang nói với tôi rằng tôi có lỗi cú pháp. Tôi chỉ không nhìn thấy chúng.


cột không phải là duy nhất hoặc bất cứ điều gì khác như thế
zmf

Câu trả lời:


600

Bạn muốn như sau:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Các cột là nullable theo mặc định. Miễn là cột không được khai báo UNIQUEhoặc NOT NULL, không nên có bất kỳ vấn đề nào.


14
Có một trường hợp cạnh là TIMESTAMPloại, tùy thuộc vào phiên bản và cấu hình MySQL của bạn có thể được NOT NULLchỉ định NULLtheo đề xuất của @ConroyP thì đúng hơn.
Matthew Buckett

1
Điều này đã không làm việc cho tôi! Cột không thay đổi. Có lẽ bởi vì tôi đã có một ràng buộc đối với một bảng khác nơi cột được sử dụng (khi không null).
Rocologo

251

Lỗi cú pháp của bạn là do "bảng" bị thiếu trong truy vấn

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
Đây thực sự là câu trả lời đúng - trong khi mệnh đề NULL không bắt buộc, không có gì sai khi cung cấp nó. BẢNG bị thiếu trong câu lệnh ALTER TABLE là vấn đề thực sự.
SamStephens

@SamStephens và Xofo: Có một câu hỏi chính và phụ ("xen kẽ"). Đây là câu trả lời đúng cho câu hỏi phụ trong khi câu trả lời được chấp nhận là câu trả lời đúng cho câu hỏi chính.
jdunk

@SamStephens Chỉ vì không có gì sai khi cung cấp NULL, nó không làm cho câu trả lời này trở nên "chính xác" hơn câu trả lời được chấp nhận? Biết rằng các cột là nullable theo mặc định (như được đề cập trong câu trả lời được chấp nhận) là hữu ích đối với câu hỏi cụ thể này.
rybo111

OP không biết tại sao tuyên bố của họ không hoạt động. Câu trả lời này giải thích tại sao.
SamStephens

28

Giải pháp của tôi:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Ví dụ:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

7

Trong một số trường hợp (nếu bạn nhận được "LRI 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; ...") bạn cần phải làm

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

3

Giải pháp của tôi giống như @Krishnrohit:

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

Tôi thực sự đã đặt cột như NOT NULLnhưng với truy vấn trên, nó đã được đổi thànhNULL .

PS Tôi biết đây là một chủ đề cũ nhưng dường như không ai thừa nhận đó CHANGEcũng là chính xác.


-5

Sử dụng: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
Sẽ tốt hơn nếu câu trả lời của bạn cung cấp giá trị bổ sung trên đầu các câu trả lời khác. Trong trường hợp này, câu trả lời của bạn không cung cấp giá trị bổ sung, vì Daniel Spiewak đã đăng giải pháp đó. Nếu câu trả lời trước đó hữu ích cho bạn, bạn nên bỏ phiếu khi bạn có đủ danh tiếng
Luís Cruz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.