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

ชนิดข้อมูลสำหรับผสมตัวเลขและตัวอักษรใน MySQL

คำตอบสั้น: ใช้ 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);

หรือเก็บตัวเลขแยกคอลัมน์ไว้สำหรับการเรียงลำดับ