ความจริงเกี่ยวกับ BOOLEAN, BOOL และ TINYINT(1) ใน MySQL
สรุปสั้น: BOOLEAN และ BOOL เป็นเพียง Alias (ชื่อเรียกอื่น) ของ TINYINT(1) เท่านั้น
หลักฐานจากการตรวจสอบโครงสร้างตาราง
1. สร้างตารางด้วย BOOLEAN:
CREATE TABLE BooleanDemo (
IsOn BOOLEAN
);
ตรวจสอบโครงสร้างจริง:
SHOW CREATE TABLE BooleanDemo;
ผลลัพธ์:
CREATE TABLE `booleandemo` (
`IsOn` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
2. สร้างตารางด้วย BOOL:
CREATE TABLE BoolDemo (
validUser BOOL
);
ตรวจสอบโครงสร้างจริง:
SHOW CREATE TABLE BoolDemo;
ผลลัพธ์:
CREATE TABLE `booldemo` (
`validUser` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
การทดสอบการเก็บค่า
ทั้ง BOOLEAN และ BOOL เก็บค่าได้เหมือน TINYINT(1):
TRUEหรือtrue→ เก็บเป็น1FALSEหรือfalse→ เก็บเป็น0- ตัวเลข
0→ เก็บเป็น0 - ตัวเลขไม่ใช่ 0 → เก็บเป็น
1
คำแนะนำ
- ใช้
BOOLEANหรือBOOLเพื่อความอ่านง่าย (Semantic clarity) - ในระดับ Storage ทั้งคู่เหมือนกันทุกประการ
- ไม่มีข้อได้เปรียบด้านประสิทธิภาพหรือพื้นที่จัดเก็บ