เปลี่ยนความยาวสูงสุดของคอลัมน์ varchar หรือไม่


188

ฉันพยายามอัปเดตความยาวของคอลัมน์ varchar จาก 255 ตัวอักษรเป็น 500 โดยไม่สูญเสียเนื้อหา ก่อนหน้านี้ฉันทำดร็อปและสร้างตารางใหม่ แต่ฉันไม่เคยเห็นคำสั่งเปลี่ยนแปลงซึ่งเป็นสิ่งที่ฉันเชื่อว่าฉันต้องใช้เพื่อทำสิ่งนี้ ฉันพบเอกสารที่นี่: ALTER TABLE (Transfact-SQL)แต่ฉันไม่สามารถทำหัวหรือก้อยได้

ฉันมีดังต่อไปนี้ (เป็นหลักไม่มีอะไรน่าเสียดาย):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

ฉันจะเข้าใกล้สิ่งนี้ได้อย่างไร มีเอกสารที่ดีกว่าสำหรับคำสั่งนี้หรือไม่ (ฉันได้ค้นหาคำสั่งตัวอย่างบางส่วน แต่ว่างเปล่า)

คำตอบ:


362

คุณต้องการ

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

แต่อย่าลืมระบุNOT NULLอย่างชัดเจนหากต้องการ

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

หากคุณไม่ระบุรายละเอียดไว้ด้านล่าง ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

แล้วคอลัมน์จะเริ่มต้นที่จะช่วยให้ nulls NOT NULLแม้ว่ามันจะถูกกำหนดเดิมเป็น เช่นการละทิ้งสเปคใน a ALTER TABLE ... ALTER COLUMNนั้นจะถือว่าเป็นเสมอ

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

พฤติกรรมนี้แตกต่างจากที่ใช้สำหรับคอลัมน์ใหม่ที่สร้างด้วยALTER TABLE(หรือในCREATE TABLEเวลา) ค่าเริ่มต้นนั้นขึ้นอยู่กับการANSI_NULL_DFLTตั้งค่า


คุณสามารถอธิบายวัตถุประสงค์ของการเพิ่ม '[ไม่] NULL' ที่นี่ได้ไหม แค่อยากรู้ว่าทำไมคำตอบของคุณถึงได้เป็นของมิทช์?
ไมเคิล A


ดังนั้น [NOT NULL] ระบุว่าค่า NULL -cannot- ถูกวางไว้ในคอลัมน์หรือไม่
Michael A

3
@Michael - หากไม่มีเครื่องหมายวงเล็บใช่ วงเล็บเหลี่ยมระบุว่าบิตของไวยากรณ์เป็นทางเลือก หากคุณไม่อนุญาตให้ทำเช่นNULLนั้นจะเป็นค่าเริ่มต้น
Martin Smith

1
จัดเรียง :) .. แก้ไขคอลัมน์ MY_COL ชุดข้อมูลประเภท VARCHAR (100)
Kdean571

26

การเพิ่มขนาดคอลัมน์ด้วยALTERจะไม่ทำให้ข้อมูลสูญหาย:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

@Martin ชี้ให้เห็นอย่าลืมระบุอย่างชัดเจน NULL | NOT NULL


14

คุณสามารถใช้modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");

4
นั่นคือสิ่งที่โพสต์แล้ว มีอะไรใหม่ที่คุณอยากแบ่งปันไหม
Nico Haase

นอกจากนี้ยังใช้งานได้กับ MySQL และคำถามนี้ถูกแท็ก [TSQL] ดังนั้นจึงอยู่ผิดที่
jean

6
แก้ไขเป็นอะไรใหม่ ALTER COLUMN ทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์ แต่ MODIFY COLUMN ใช้งานได้สำหรับฉันโดยไม่มีปัญหา
KGBird

@KGBird - เพราะคุณไม่ได้ใช้ SQL Server MODIFYเป็นไวยากรณ์สำหรับระบบฐานข้อมูลอื่น ๆ กว่าคำถามเกี่ยวกับ
Martin Smith

1

การใช้ Maria-DB และเครื่องมือ DB-Navigator ภายใน IntelliJ คอลัมน์ MODIFYทำงานแทนฉันสำหรับคอลัมน์ Alter


2
โพสต์นี้มีอะไรใหม่เพิ่มในคำตอบของ @Mitch Wheat ในวันที่ 12 มกราคม 2555 เวลา 1:37 น.
scopchanov

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

คำถามมาสาย - แต่ฉันใช้Oracle SQL Developerและคำตอบของ @ anonymous ไม่ได้อยู่ใกล้ที่สุด แต่ยังได้รับข้อผิดพลาดทางไวยากรณ์จนกว่าฉันจะแก้ไขแบบสอบถามนี้

หวังว่านี่จะช่วยใครซักคน


(เปลี่ยนแก้ไขการปรับเปลี่ยนและไม่จำเป็นต้องกำหนด column_name เป็นคอลัมน์)
เจทท์

0

ฉันยังมีข้อสงสัยดังกล่าวสิ่งที่ได้ผลสำหรับฉันคือ

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  


0

คุณสามารถบันทึกข้อมูลเก่าและสร้างตารางใหม่ด้วยพารามิเตอร์ใหม่

ดูภาพ

ใน Studio จัดการเซิร์ฟเวอร์ SQL: "ฐานข้อมูลของคุณ" => task => generatecripts => เลือกวัตถุฐานข้อมูลเฉพาะ => "ตารางของคุณ" => ขั้นสูง => ประเภทของข้อมูลไปยังสคริปต์ - สคีมาและข้อมูล => สร้าง

ส่วนตัวฉันทำเช่นนั้น


-1

สำหรับ MariaDB ให้ใช้คอลัมน์แก้ไข :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

มันจะทำงาน.


คำถามเกี่ยวกับเซิร์ฟเวอร์ SQL
Martin Smith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.