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

Cách tăng độ dài cột VARCHAR trong MySQL?

Sử dụng ALTER TABLE ... MODIFY COLUMN để định nghĩa lại cột với độ dài VARCHAR mới lớn hơn.

Tạo bảng

mysql> CREATE TABLE DemoTable (
    -> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserFirstName VARCHAR(10),
    -> UserLastName VARCHAR(20),
    -> UserAge INT
    -> );

Kiểm tra cấu trúc ban đầu

mysql> DESC DemoTable;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| UserId        | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserFirstName | varchar(10) | YES  |     | NULL    |                |
| UserLastName  | varchar(20) | YES  |     | NULL    |                |
| UserAge       | int(11)     | YES  |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+

Tăng UserFirstName từ VARCHAR(10) lên VARCHAR(40)

mysql> ALTER TABLE DemoTable MODIFY UserFirstName VARCHAR(40);
Query OK, 0 rows affected (0.23 sec)

Kiểm tra cấu trúc sau thay đổi

mysql> DESC DemoTable;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| UserId        | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserFirstName | varchar(40) | YES  |     | NULL    |                |
| UserLastName  | varchar(20) | YES  |     | NULL    |                |
| UserAge       | int(11)     | YES  |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+

Lưu ý quan trọng

  • Chỉ tăng độ dài (VARCHAR(10) → VARCHAR(40)): An toàn, nhanh, không mất dữ liệu
  • Giảm độ dài (VARCHAR(40) → VARCHAR(10)): Rủi ro cắt dữ liệu. MySQL strict mode sẽ báo lỗi nếu có dữ liệu > 10 ký tự
  • Thay đổi kiểu (VARCHAR ↔ INT, v.v.): Cần kiểm tra dữ liệu tương thích
  • Index: Nếu cột có index, ALTER sẽ rebuild index (tốn thời gian trên bảng lớn)
  • Metadata lock: ALTER TABLE khóa bảng — tránh giờ cao điểm

Cú pháp thay thế: CHANGE

ALTER TABLE DemoTable CHANGE UserFirstName UserFirstName VARCHAR(40);

Cần lặp tên cột 2 lần (old_name, new_name). Dùng khi muốn đổi tên cột.

Kiểm tra độ dài thực tế dữ liệu trước khi giảm

SELECT MAX(CHAR_LENGTH(UserFirstName)) FROM DemoTable;

Đảm bảo giá trị max ≤ độ dài mới mong muốn.