Thay đổi độ dài tối đa của một cột varchar?


188

Tôi đang cố gắng cập nhật độ dài của cột varchar từ 255 ký tự lên 500 mà không làm mất nội dung. Tôi đã bỏ và tạo lại các bảng trước đó nhưng tôi chưa bao giờ tiếp xúc với câu lệnh thay đổi, đó là điều tôi tin rằng tôi cần sử dụng để làm điều này. Tôi đã tìm thấy tài liệu ở đây: ALTER TABLE (Transfact-SQL) tuy nhiên tôi không thể tạo ra đầu hoặc đuôi của nó.

Tôi có những điều sau đây cho đến nay (về cơ bản không có gì đáng tiếc):

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

Làm thế nào để tôi tiếp cận điều này? Có tài liệu nào tốt hơn cho tuyên bố này không (tôi đã thực hiện một số tìm kiếm cho một tuyên bố ví dụ nhưng đã bỏ trống)?

Câu trả lời:


361

Bạn cần

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

Nhưng hãy nhớ chỉ định NOT NULLrõ ràng nếu muốn.

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

Nếu bạn để nó không xác định như dưới đây ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Sau đó, cột sẽ mặc định cho phép null ngay cả khi nó được định nghĩa ban đầu là NOT NULL. tức là bỏ qua các đặc tả trong một ALTER TABLE ... ALTER COLUMNluôn luôn được coi là.

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

Hành vi này khác với hành vi được sử dụng cho các cột mới được tạo bằng ALTER TABLE(hoặc tại CREATE TABLEthời điểm). Có sự vô hiệu mặc định phụ thuộc vào các ANSI_NULL_DFLTcài đặt.


Bạn có thể giải thích mục đích của việc thêm '[KHÔNG] NULL' ở đây không? Chỉ tò mò tại sao câu trả lời của bạn lại có một Mitch không?
Michael A


Vì vậy, [KHÔNG NULL] chỉ định rằng giá trị NULL -cannot- được đặt trong cột?
Michael A

3
@Michael - Không có dấu ngoặc vuông, vâng. Dấu ngoặc vuông cho biết bit cú pháp là tùy chọn. Nếu bạn bỏ qua nó cho phép NULLlà mặc định.
Martin Smith

1
đã sắp xếp nó :) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR (100)
Kdean571

26

Tăng kích thước cột ALTERsẽ không mất bất kỳ dữ liệu nào:

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

Như @Martin chỉ ra, hãy nhớ xác định rõ ràng NULL | NOT NULL


14

Bạn có thể sử dụng modify:

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

4
Đó là những gì đã được đăng. Có điều gì mới mà bạn muốn chia sẻ không?
Nico Haase

Ngoài ra, nó hoạt động cho MySQL và câu hỏi này được gắn thẻ [TSQL] vì vậy nó ở sai vị trí
jean

6
SỬA ĐỔI là những gì mới. ALTER COLUMN đã cho tôi một lỗi cú pháp nhưng MODIFY COLUMN hoạt động với tôi mà không gặp vấn đề gì.
KGBird

@KGBird - vì bạn không sử dụng SQL Server. MODIFYlà cú pháp cho một số hệ thống cơ sở dữ liệu khác ngoài câu hỏi đã được đưa ra
Martin Smith

1

Sử dụng công cụ Maria-DB và DB-Navigator bên trong IntelliJ, MODIFY Cột làm việc cho tôi thay vì Cột thay đổi


2
Bài đăng này có gì mới trong câu trả lời do @Mitch Wheat cung cấp vào ngày 12 tháng 1 năm 12 lúc 1:37?
scopchanov

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Cuối câu hỏi - nhưng tôi đang sử dụng Oracle SQL Developer và câu trả lời của @ nặc danh là lỗi gần nhất nhưng vẫn nhận được lỗi cú pháp cho đến khi tôi chỉnh sửa truy vấn này.

Hy vọng điều này sẽ giúp ai đó


(thay đổi thay đổi để sửa đổi và không cần xác định cột_name là cột)
Jedo

0

Tôi cũng đã có nghi ngờ trên, những gì làm việc cho tôi là

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

0

Điều này làm việc cho tôi trong db2:

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

0

Thay vào đó, bạn có thể lưu dữ liệu cũ và tạo một bảng mới với các tham số mới.

xem hình ảnh

Trong SQL Server Management Studio: "cơ sở dữ liệu của bạn" => tác vụ => Genercripts => chọn đối tượng cơ sở dữ liệu cụ thể => "bảng của bạn" => nâng cao => loại dữ liệu vào tập lệnh - lược đồ và dữ liệu => tạo

Cá nhân, tôi đã làm như vậy.


-1

Đối với MariaDB, sử dụng cột sửa đổi :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Nó sẽ làm việc.


Câu hỏi là về máy chủ SQL
Martin Smith
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.