Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เพิ่มขนาด VARCHAR คอลัมน์ที่มีข้อมูลอยู่ใน MySQL ไม่สูญเสียข้อมูล


ไวยากรณ์เพิ่มขนาด 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=INPLACE vs ALGORITHM=COPY