Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tăng kích thước VARCHAR cột hiện có không mất dữ liệu MySQL


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-change hoặc gh-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.