เมื่อต้องการเพิ่มความยาว (Length) ของคอลัมน์ VARCHAR ให้ใช้ ALTER TABLE ... MODIFY ระบุขนาดใหม่ที่ใหญ่กว่าเดิม ข้อมูลเดิมจะคงอยู่
สร้างตารางและตรวจสอบ
mysql> create table DemoTable (
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserFirstName varchar(10),
UserLastName varchar(20),
UserAge int
);
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 | | +---------------+-------------+------+-----+---------+----------------+
เพิ่มความยาว UserFirstName จาก 10 เป็น 40
mysql> alter table DemoTable modify UserFirstName varchar(40);
ตรวจสอบหลังเปลี่ยน
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 | | +---------------+-------------+------+-----+---------+----------------+
Syntax
ALTER TABLE table_name MODIFY column_name VARCHAR(new_length) [other_constraints];
ข้อสังเกต
- เพิ่มขนาด (Increase) - ปลอดภัย ข้อมูลไม่หาย Index Rebuild อัตโนมัติ
- ลดขนาด (Decrease) - เสี่ยง Data Truncation ต้องเช็ค
MAX(LENGTH(col))ก่อน - VARCHAR → TEXT - ได้ แต่ Index ต้อง Drop ก่อน (Prefix Length)
- CHAR → VARCHAR - ได้ (Space Padding จะหาย)
ตรวจสอบก่อนลดขนาด
SELECT MAX(LENGTH(UserFirstName)) FROM DemoTable; -- ถ้าผลลัพธ์ <= ขนาดใหม่ → ปลอดภัย
MySQL 8.0+ Instant DDL (บางกรณี)
- เพิ่ม VARCHAR Length: Instant (Metadata Only, No Table Rebuild) - MySQL 8.0.12+
- ลด VARCHAR Length: Inplace (Rebuild Table)
- เปลี่ยน CHAR → VARCHAR: Inplace
คำเตือน Production
- Table Lock ระหว่าง Rebuild (ยกเว้น Instant DDL)
- ขนาดใหญ่ ใช้
pt-online-schema-change(Percona Toolkit) หรือgh-ost(GitHub) - Backup ก่อนทำ Schema Change
- ทดสอบ Staging ก่อน Production