Làm cách nào tôi có thể sửa đổi kích thước của cột trong bảng mysql?


301

Tôi đã tạo một bảng và vô tình đặt varcharchiều dài 300thay vì 65353. Lam sao tôi co thể sửa no?

Một ví dụ sẽ được đánh giá cao.

Câu trả lời:


571

Bạn đã thử điều này?

ALTER TABLE <table_name> MODIFY <col_name> VARCHAR(65353);

Điều này sẽ thay đổi loại của col_name thànhVARCHAR(65353)


14
Điều này có giữ dữ liệu nguyên vẹn không?
Flimm

1
@Flimm dường như đối với tôi.
deed02392

39
@Flimm - chỉ là một con trỏ, nếu bạn có VARCHAR (100) và bạn đổi nó thành VARCHAR (50), nó sẽ cắt mọi dữ liệu hiện có khỏi các cột. Theo câu hỏi cụ thể này, làm cho một cột lớn hơn sẽ không có vấn đề gì với dữ liệu.
Warren Sergent

8
@WarrenSipes, được thử nghiệm trong 5.7.15, nó sẽ đưa ra lỗi nếu có các giá trị bị ảnh hưởng bởi thay đổi. Nó sẽ không cắt ngắn theo mặc định. Bạn sẽ phải cập nhật các giá trị trước với SUBSTR.
Robert T.

1
@animo nói đúng. Nhìn vào đây để có câu trả lời đầy đủ stackoverflow.com/a/9611293/1594933
gontard

26
ALTER TABLE <tablename> CHANGE COLUMN <colname> <colname> VARCHAR(65536);

Bạn phải liệt kê tên cột hai lần, ngay cả khi bạn không thay đổi tên của nó.

Lưu ý rằng sau khi bạn thực hiện thay đổi này, kiểu dữ liệu của cột sẽ là MEDIUMTEXT.


Miky D là chính xác, MODIFYlệnh có thể làm điều này chính xác hơn.


Xin nhắc lại MEDIUMTEXT: một hàng MySQL chỉ có thể là 65535 byte (không tính các cột BLOB / TEXT). Nếu bạn cố gắng thay đổi một cột quá lớn, làm cho tổng kích thước của hàng 65536 trở lên, bạn có thể gặp lỗi. Nếu bạn cố gắng khai báo một cột VARCHAR(65536)thì nó quá lớn ngay cả khi đó là cột duy nhất trong bảng đó, vì vậy MySQL sẽ tự động chuyển đổi nó thành một MEDIUMTEXTloại dữ liệu.

mysql> create table foo (str varchar(300));
mysql> alter table foo modify str varchar(65536);
mysql> show create table foo;
CREATE TABLE `foo` (
  `str` mediumtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Tôi đã đọc sai câu hỏi ban đầu của bạn, bạn muốn VARCHAR(65353), điều mà MySQL có thể làm, miễn là kích thước cột đó được tóm tắt với các cột khác trong bảng không vượt quá 65535.

mysql> create table foo (str1 varchar(300), str2 varchar(300));
mysql> alter table foo modify str2 varchar(65353);
ERROR 1118 (42000): Row size too large. 
The maximum row size for the used table type, not counting BLOBs, is 65535. 
You have to change some columns to TEXT or BLOBs

+1 các bạn có cùng một câu trả lời. Điều gì có nghĩa là kiểu dữ liệu của cột sẽ là MEDIUMTEXT? thx
scriptsomzzz

3
@Bill: CHANGE thường được sử dụng để đổi tên cột và thay đổi kiểu dữ liệu. MODIFY sẽ chỉ thay đổi loại dữ liệu của cột
Mike Dinescu
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.