ฉันจะแก้ไขคอลัมน์ MySQL เพื่ออนุญาตให้ NULL ได้อย่างไร


396

MySQL 5.0.45

ไวยากรณ์ในการแก้ไขตารางเพื่ออนุญาตให้คอลัมน์เป็นโมฆะคืออะไรสลับกันกับสิ่งนี้:

ALTER mytable MODIFY mycolumn varchar(255) null;

ฉันตีความคู่มือเป็นเพียงเรียกใช้ข้างต้นและมันจะสร้างคอลัมน์ขึ้นใหม่คราวนี้จะอนุญาตให้เป็นโมฆะ เซิร์ฟเวอร์กำลังบอกฉันว่าฉันมีข้อผิดพลาดด้านการสร้างประโยค ฉันแค่ไม่เห็นพวกเขา


คอลัมน์ไม่ซ้ำกันหรืออย่างอื่นเช่นนั้น
zmf

คำตอบ:


600

คุณต้องการต่อไปนี้:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

คอลัมน์เป็นโมฆะโดยค่าเริ่มต้น ตราบใดที่ไม่มีการประกาศคอลัมน์UNIQUEหรือNOT NULLไม่ควรมีปัญหาใด ๆ


14
มีกรณีขอบซึ่งเป็นTIMESTAMPประเภทซึ่งขึ้นอยู่กับรุ่น MySQL ของคุณและการNOT NULLกำหนดค่าสามารถระบุNULLตามที่แนะนำโดย @ConroyP ถูกต้องมากขึ้น
Matthew Buckett

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน! คอลัมน์ไม่เปลี่ยนแปลง อาจเป็นเพราะฉันมีข้อ จำกัด ในตารางอื่นที่มีการใช้คอลัมน์ (เมื่อไม่เป็นโมฆะ)
Rocologo

251

ข้อผิดพลาดทางไวยากรณ์ของคุณเกิดจาก "table" หายไปในแบบสอบถาม

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
นี่เป็นคำตอบที่ถูกต้องจริง ๆ - ในขณะที่ไม่จำเป็นต้องใช้ NULL clause ไม่มีอะไรผิดปกติที่จะให้มัน TABLE ที่หายไปจากคำสั่ง ALTER TABLE เป็นปัญหาจริง
SamStephens

@ SamStephens และ Xofo: มีคำถามหลักและรอง ("สลับกัน") นี่คือคำตอบที่ถูกต้องสำหรับคำถามรองในขณะที่คำตอบที่ยอมรับได้เป็นคำตอบที่ถูกต้องสำหรับคำถามหลัก
jdunk

@ SamStephens เพียงเพราะไม่มีอะไรผิดปกติกับการให้บริการNULLมันไม่ได้ทำให้คำตอบนี้ "ถูกต้อง" มากกว่าคำตอบที่ได้รับการยอมรับอีกต่อไป? การรู้ว่าคอลัมน์เป็นโมฆะโดยค่าเริ่มต้น (ดังที่กล่าวไว้ในคำตอบที่ยอมรับ) มีประโยชน์ในเรื่องที่เกี่ยวกับคำถามนี้
rybo111

OP ไม่ทราบว่าทำไมคำสั่งของพวกเขาไม่ทำงาน คำตอบนี้อธิบายว่าทำไม
SamStephens

28

ทางออกของฉัน:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

ตัวอย่างเช่น:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;

7

ภายใต้สถานการณ์บางอย่าง (ถ้าคุณได้รับ "ข้อผิดพลาด 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ; ... ") คุณต้องทำ

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

3

โซลูชันของฉันเหมือนกับ @Krishnrohit:

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

ที่จริงผมมีชุดคอลัมน์เป็นแต่มีแบบสอบถามดังกล่าวมันก็เปลี่ยนไปNOT NULLNULL

ป.ล. ฉันรู้ว่านี่เป็นด้ายเก่า แต่ดูเหมือนว่าไม่มีใครรับรู้ว่าCHANGEถูกต้องเช่นกัน


-5

ใช้: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
มันจะดีกว่าถ้าคำตอบของคุณให้คุณค่าเพิ่มเติมกับคำตอบอื่น ๆ ในกรณีนี้คำตอบของคุณไม่ได้ให้คุณค่าเพิ่มเติมเนื่องจาก Daniel Spiewak ได้โพสต์โซลูชันนั้นแล้ว หากคำตอบก่อนหน้านี้เป็นประโยชน์กับคุณคุณควรโหวตมันเมื่อคุณมีชื่อเสียง
Luís Cruz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.