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

MySQL: เลือกใช้ INT หรือ ENUM ดีกว่า?

การเลือกชนิดข้อมูลขึ้นอยู่กับลักษณะข้อมูล:

ใช้ 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 ไบต์)