การเลือกชนิดข้อมูลขึ้นอยู่กับลักษณะข้อมูล:
ใช้ ENUM เมื่อรู้ค่าที่เป็นไปได้ชัดเจนและจำกัด
ENUM จำกัดค่าได้อย่างเคร่งครัด — รับเฉพาะค่าที่กำหนดไว้เท่านั้น
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Number ENUM('10','20','30')
);
ทดสอบเพิ่มค่าที่ไม่อนุญาต:
mysql> INSERT INTO DemoTable(Number) VALUES ('50');
ERROR 1265 (01000): Data truncated for column 'Number' at row 1
ดูข้อมูลที่เพิ่มได้:
mysql> SELECT * FROM DemoTable;
+----+--------+
| Id | Number |
+----+--------+
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
+----+--------+
ใช้ TINYINT UNSIGNED เมื่อไม่แน่ใจช่วงค่าหรือต้องการยืดหยุ่น
TINYINT UNSIGNED เก็บค่า 0-255 ได้ ไม่จำกัดค่าเฉพาะบางค่า
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Number TINYINT UNSIGNED
);
mysql> INSERT INTO DemoTable(Number) VALUES (100), (50), (60), (70);
+----+--------+
| Id | Number |
+----+--------+
| 1 | 100 |
| 2 | 50 |
| 3 | 60 |
| 4 | 70 |
+----+--------+
สรุปการเลือก
| สถานการณ์ | ชนิดข้อมูลที่แนะนำ |
|---|---|
| ค่าคงที่ จำกัด ชัดเจน (เช่น สถานะ: active/inactive/pending) | ENUM |
| ค่าตัวเลขช่วงกว้าง หรือไม่ทราบค่าทั้งหมดล่วงหน้า | TINYINT UNSIGNED / SMALLINT / INT |
| ต้องการประสิทธิภาพสูงสุดและพื้นที่น้อย | ENUM (1-2 ไบต์) หรือ TINYINT (1 ไบต์) |