ไวยากรณ์เพิ่มขนาด VARCHAR
ใช้ ALTER TABLE ... CHANGE COLUMN ระบุขนาดใหม่ (ต้องระบุชื่อคอลัมน์ซ้ำ 2 ครั้ง):
ALTER TABLE your_table
CHANGE COLUMN column_name column_name VARCHAR(new_size);
ตัวอย่างการใช้งาน
สร้างตาราง VARCHAR(200)
CREATE TABLE IncreaseVarcharDemo (StudentId VARCHAR(200));
INSERT INTO IncreaseVarcharDemo VALUES ('John123');
ข้อมูลเดิม
+-----------+
| StudentId |
+-----------+
| John123 |
+-----------+
เพิ่มขนาดเป็น VARCHAR(1000)
ALTER TABLE IncreaseVarcharDemo
CHANGE COLUMN StudentId StudentId VARCHAR(1000);
ตรวจสอบโครงสร้าง
DESC IncreaseVarcharDemo;
+-----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| StudentId | varchar(1000) | YES | | NULL | |
+-----------+---------------+------+-----+---------+-------+
ข้อสังเกตสำคัญ
✅ เพิ่มขนาด (Increase) - ปลอดภัย
- VARCHAR(200) → VARCHAR(1000) : ไม่สูญเสียข้อมูล, เร็ว (Metadata Only ในบาง Version)
- MySQL 8.0.17+ รองรับ Instant DDL สำหรับการขยาย VARCHAR
❌ ลดขนาด (Decrease) - อันตราย
- VARCHAR(1000) → VARCHAR(200) : ข้อมูลที่ยาวกว่า 200 ตัวอักษรจะถูกตัด (Truncate) + Warning
- ต้องตรวจสอบก่อน:
SELECT MAX(CHAR_LENGTH(col)) FROM table;
🔄 เปลี่ยนชนิด (Type Change) - ต้องระวัง
- VARCHAR → TEXT : ได้ แต่ไม่กลับมา VARCHAR ได้ง่าย
- VARCHAR → INT : Error หากมีข้อมูลไม่ใช่ตัวเลข
MySQL 8.0+ ใช้ MODIFY COLUMN (สั้นกว่า)
ALTER TABLE IncreaseVarcharDemo
MODIFY COLUMN StudentId VARCHAR(1000);
MODIFY ไม่ต้องระบุชื่อคอลัมน์ซ้ำ เหมาะสำหรับเปลี่ยน Type/Size เท่านั้น
ประสิทธิภาพตารางใหญ่
- ใช้
pt-online-schema-change(Percona Toolkit) เพื่อไม่ Lock ตาราง - หรือ
gh-ost(GitHub Online Schema Tool) - ตรวจสอบ
ALGORITHM=INPLACEvsALGORITHM=COPY