Mengubah panjang maksimum kolom varchar?

188

Saya mencoba memperbarui panjang kolom varchar dari 255 karakter hingga 500 tanpa kehilangan isinya. Saya telah menjatuhkan dan menciptakan kembali tabel sebelumnya, tetapi saya tidak pernah terpapar pada pernyataan alter yang saya yakin perlu saya gunakan untuk melakukan ini. Saya menemukan dokumentasi di sini: ALTER TABLE (Transfact-SQL) namun saya tidak dapat membuat kepala atau ekornya.

Saya memiliki yang berikut sejauh ini (pada dasarnya tidak ada yang sayangnya):

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

Bagaimana saya mendekati ini? Apakah ada dokumentasi yang lebih baik untuk pernyataan ini di luar sana (saya melakukan beberapa pencarian untuk contoh pernyataan tetapi muncul kosong)?

Michael A
sumber

Jawaban:

362

Kamu butuh

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

Tapi ingat untuk menentukan NOT NULLsecara eksplisit jika diinginkan.

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

Jika Anda membiarkannya tidak ditentukan seperti di bawah ini ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Maka kolom akan secara default mengizinkan nulls bahkan jika itu awalnya didefinisikan sebagai NOT NULL. yaitu menghilangkan spesifikasi dalam ALTER TABLE ... ALTER COLUMNselalu diperlakukan sebagai.

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

Perilaku ini berbeda dari yang digunakan untuk kolom baru yang dibuat dengan ALTER TABLE(atau pada CREATE TABLEwaktu). Di sana, nullability default tergantung pada ANSI_NULL_DFLTpengaturan.

Martin Smith
sumber
Bisakah Anda menjelaskan tujuan menambahkan '[TIDAK] NULL' di sini? Hanya ingin tahu mengapa jawaban Anda memiliki jawaban Mitch dan bukan?
Michael A
Jadi [NOT NULL] menentukan bahwa nilai NULL -cannot- ditempatkan di kolom?
Michael A
3
@Michael - Tanpa tanda kurung, ya. Tanda kurung menunjukkan bahwa sedikit sintaks adalah opsional. Jika Anda mengabaikannya, memungkinkan NULLadalah default.
Martin Smith
1
diurutkan itu :) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR (100)
Kdean571
26

Meningkatkan ukuran kolom dengan ALTERtidak akan kehilangan data apa pun:

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

Seperti yang ditunjukkan @Martin, ingatlah untuk secara eksplisit menentukan NULL | NOT NULL

Mitch Wheat
sumber
14

Anda bisa menggunakan modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");
anonim
sumber
4
Itu yang sudah diposting. Adakah sesuatu yang baru yang ingin Anda bagikan?
Nico Haase
Juga berfungsi untuk MySQL dan pertanyaan ini ditandai [TSQL] sehingga berada di tempat yang salah
jean
6
MODIFY adalah apa yang baru. ALTER COLUMN memberi saya kesalahan sintaks tetapi MODIFY COLUMN bekerja untuk saya tanpa masalah.
KGBird
@KGBird - karena Anda tidak menggunakan SQL Server. MODIFYadalah sintaks untuk beberapa sistem basis data selain pertanyaannya
Martin Smith
1

Menggunakan alat Maria-DB dan DB-Navigator di dalam IntelliJ, MODIFY Column berfungsi untuk saya alih-alih Alter Column

Rahul Sharma
sumber
2
Apa yang baru yang ditambahkan oleh posting ini ke jawaban yang diberikan oleh @Mitch Wheat pada 12 Januari '12 pada 1:37?
scopchanov
1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Terlambat untuk pertanyaan - tetapi saya menggunakan Oracle SQL Developer dan @ anonim's jawaban adalah yang paling dekat tetapi terus menerima kesalahan sintaksis sampai saya mengedit permintaan untuk ini.

Semoga ini bisa membantu seseorang

Jett
sumber
(ubah alter untuk memodifikasi dan tidak perlu mendefinisikan column_name sebagai kolom)
Jett
0

Saya juga memiliki keraguan di atas, apa yang berhasil bagi saya

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  
R. Gurung
sumber
0

Ini bekerja untuk saya di db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);
Mukesh
sumber
0

Sebagai alternatif, Anda dapat menyimpan data lama dan membuat tabel baru dengan parameter baru.

lihat gambar

Dalam SQL Server Management Studio: "database Anda" => task => generatescripts => pilih objek database spesifik => "tabel Anda" => lanjutan => jenis data ke skrip - skema dan data => hasilkan

Secara pribadi, saya melakukannya.

vlad
sumber
-1

Untuk MariaDB, gunakan kolom ubah :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Itu akan berhasil.

hammadshahir
sumber
Pertanyaannya adalah tentang SQL server
Martin Smith