Sử dụng ALTER TABLE ... CHANGE COLUMN (hoặc MODIFY COLUMN) để tăng độ dài VARCHAR. Dữ liệu hiện có được bảo toàn.
Cú pháp
-- CHANGE COLUMN (cần lặp tên cột) ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(new_length); -- MODIFY COLUMN (ngắn gọn hơn, MySQL extension) ALTER TABLE table_name MODIFY COLUMN col_name VARCHAR(new_length);
Ví dụ minh họa
mysql> CREATE TABLE IncreaseVarcharDemo (StudentId VARCHAR(200));
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO IncreaseVarcharDemo VALUES ('John123');
Query OK, 1 row affected
Tăng từ 200 lên 1000:
mysql> ALTER TABLE IncreaseVarcharDemo CHANGE StudentId StudentId VARCHAR(1000); Query OK, 0 rows affected (0.18 sec) -- Hoặc dùng MODIFY: -- ALTER TABLE IncreaseVarcharDemo MODIFY StudentId VARCHAR(1000);
Kiểm tra:
mysql> DESC IncreaseVarcharDemo; +-----------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------------+------+-----+---------+-------+ | StudentId | varchar(1000) | YES | | NULL | | +-----------+---------------+------+-----+---------+-------+
Lưu ý quan trọng
- Chỉ được TĂNG kích thước (VARCHAR(200) → VARCHAR(1000)). Giảm kích thước (VARCHAR(1000) → VARCHAR(200)) có thể cắt dữ liệu nếu có giá trị dài hơn 200.
- Thao tác này rebuild bảng (table rebuild) → khóa bảng, tốn thời gian với bảng lớn.
- Production: dùng
pt-online-schema-changehoặcgh-ost. - Index trên cột VARCHAR: nếu tăng độ dài vượt quá giới hạn index (767 bytes cho InnoDB default, 3072 cho innodb_large_prefix), có thể cần rebuild index.
CHANGE vs MODIFY
MODIFY: ngắn gọn, chỉ đổi kiểu/độ dài, không đổi tên.CHANGE: cho phép đổi tên cột, đổi vị trí (FIRST/AFTER).- Để chỉ tăng VARCHAR: MODIFY gọn hơn.