สรุปความแตกต่างหลัก
| คุณสมบัติ | INT(1) | TINYINT(1) |
| ขนาดเก็บข้อมูล | 4 ไบต์ (32-bit) | 1 ไบต์ (8-bit) |
| ช่วงค่า SIGNED | -2,147,483,648 ~ 2,147,483,647 | -128 ~ 127 |
| ช่วงค่า UNSIGNED | 0 ~ 4,294,967,295 | 0 ~ 255 |
| ตัวเลขในวงเล็บ (1) | Display Width เท่านั้น | Display Width เท่านั้น |
ตัวอย่างแสดงผลกับ ZEROFILL
สร้างตาราง
CREATE TABLE intAndTinyint (
FirstNumber INT(1) ZEROFILL,
SecondNumber TINYINT(1) ZEROFILL
);
เพิ่มข้อมูล
INSERT INTO intAndTinyint VALUES (1, 1), (12, 12), (123, 123);
ผลลัพธ์ (Display Width = 1 ไม่มีผลกับ ZEROFILL เพราะค่ายาวกว่า)
| FirstNumber INT(1) | SecondNumber TINYINT(1) |
| 1 | 1 |
| 12 | 12 |
| 123 | 123 |
ตัวอย่าง Display Width ที่ใหญ่กว่า (INT(11) vs INT(13))
CREATE TABLE intVsIntAnyThingDemo (
Number1 INT(11) UNSIGNED ZEROFILL,
Number2 INT(13) UNSIGNED ZEROFILL
);
INSERT INTO intVsIntAnyThingDemo VALUES
(12345, 6789), (3, 2), (12, 89), (123, 6789), (1234, 6789);
ผลลัพธ์
| Number1 INT(11) | Number2 INT(13) |
| 00000012345 | 0000000006789 |
| 00000000003 | 0000000000002 |
| 00000000012 | 0000000000089 |
| 00000000123 | 0000000006789 |
| 00000001234 | 0000000006789 |
เมื่อไหร่ควรใช้ TINYINT?
- 🏷️ Boolean/Flag: 0/1 (MySQL แปลง BOOLEAN → TINYINT(1) อัตโนมัติ)
- 🔢 ค่าที่เล็ก: Status (0-10), Priority (1-5), Enum-like values
- 💾 ประหยัดพื้นที่: ล้านแถว × 3 ไบต์ = ประหยัดหลายๆ MB
- ⚡ Index เล็กลง: เร็วกว่า, ใช้ RAM น้อยกว่า
ข้อสังเกต
- ⚠️ MySQL 8.0.17+ Deprecated Display Width และ ZEROFILL
- 📝 TINYINT(1) มักใช้แทน Boolean แต่จริงๆ เก็บค่า -128 ถึง 127 ได้
- 🔧 ใช้
CHECK (col IN (0,1)) จำกัดค่าได้จริง (MySQL 8.0.16+)