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

ความแตกต่างระหว่าง INT(1) และ TINYINT(1) ใน MySQL

สรุปความแตกต่างหลัก

คุณสมบัติINT(1)TINYINT(1)
ขนาดเก็บข้อมูล4 ไบต์ (32-bit)1 ไบต์ (8-bit)
ช่วงค่า SIGNED-2,147,483,648 ~ 2,147,483,647-128 ~ 127
ช่วงค่า UNSIGNED0 ~ 4,294,967,2950 ~ 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)
11
1212
123123

ตัวอย่าง 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)
000000123450000000006789
000000000030000000000002
000000000120000000000089
000000001230000000006789
000000012340000000006789

เมื่อไหร่ควรใช้ 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+)