คำตอบสั้น: ใช้ VARCHAR
เมื่อต้องจัดเก็บข้อมูลที่ผสมตัวเลขและตัวอักษร (เช่น รหัสสินค้า "SKU-123", หมายเลขสมาชิก "M2024001") ชนิดข้อมูลที่เหมาะสมที่สุดคือ VARCHAR
ไวยากรณ์
CREATE TABLE yourTable (
yourColumn VARCHAR(40)
);
ตัวอย่างการใช้งาน
CREATE TABLE demo28 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(40)
);
INSERT INTO demo28 (user_id) VALUES
('John_123'), ('David_44'), ('Mike99'), ('Sam101');
ผลลัพธ์
+----+----------+ | id | user_id | +----+----------+ | 1 | John_123 | | 2 | David_44 | | 3 | Mike99 | | 4 | Sam101 | +----+----------+
ทำไมต้อง VARCHAR?
- ความยืดหยุ่น: รองรับตัวอักษร ตัวเลข อักขระพิเศษ (_ - @ .) ได้หมด
- ประหยัดพื้นที่: จัดเก็บเฉพาะความยาวจริง + 1-2 ไบต์สำหรับเก็บความยาว
- ดัชนีได้: สร้าง INDEX บน VARCHAR ได้ (แตกต่างจาก TEXT)
- เรียงลำดับได้: ใช้ ORDER BY ได้ตามลำดับตัวอักษร (lexicographic)
ข้อควรพิจารณา
| สถานการณ์ | ชนิดข้อมูลแนะนำ |
|---|---|
| รหัส/ID ผสมตัวอักษร-ตัวเลข ความยาวคงที่ | CHAR(n) |
| รหัส/ID ผสมตัวอักษร-ตัวเลข ความยาวไม่คงที่ | VARCHAR(n) |
| ข้อความยาวมาก (> 65,535 ตัวอักษร) | TEXT / LONGTEXT |
| ต้องคำนวณทางคณิตศาสตร์ | INT, DECIMAL, FLOAT (แยกคอลัมน์) |
เคล็ดลับ: การเรียงลำดับที่เป็นธรรมชาติ (Natural Sort)
VARCHAR เรียงแบบ Lexicographic (ตัวอักษร) ทำให้ "A10" มาก่อน "A2" หากต้องการเรียงแบบตัวเลข:
SELECT * FROM demo28
ORDER BY CAST(SUBSTRING(user_id, LOCATE('_', user_id) + 1) AS UNSIGNED);
หรือเก็บตัวเลขแยกคอลัมน์ไว้สำหรับการเรียงลำดับ