2008-10-17 9 views
288

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

cú pháp để thay đổi một bảng để cho phép một cột để được null là gì, xen kẽ có 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 như 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ủ 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.

+0

cột không phải là duy nhất hoặc bất cứ thứ gì như – zmf

Trả lời

421

Bạn muốn những điều sau:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255); 

Cột là nullable theo mặc định. Miễn là cột không được khai báo là UNIQUE hoặc NOT NULL, sẽ không có vấn đề gì.

+9

rằng Có một trường hợp cạnh đó là 'loại TIMESTAMP', mà tùy thuộc vào phiên bản MySQL của bạn và cấu hình có thể 'NOT NULL' định 'NULL' theo đề xuất của @ConroyP là chính xác hơn. –

+0

Điều này không phù hợp với tôi! Cột không thay đổi. Có lẽ vì tôi đã có một ràng buộc với một bảng khác, nơi cột được sử dụng (khi không phải là null). – Rocologo

150

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

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

Đây thực sự là câu trả lời đúng - trong khi mệnh đề NULL là không cần thiết, không có gì sai khi cung cấp nó. TABLE còn thiếu từ câu lệnh ALTER TABLE là vấn đề thực sự. – SamStephens

+0

Đây là câu trả lời "chính xác hơn". – Xofo

+0

@SamStephens và Xofo: Có câu hỏi chính và phụ ("luân phiên"). Đâ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 chính xác cho câu trả lời chính. – jdunk

4

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

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

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

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

+12

Sẽ tốt hơn nếu câu trả lời của bạn cung cấp thêm giá trị trên 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 nó] (http://stackoverflow.com/help/privileges/vote-up) khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/danh tiếng) –