ชนิดข้อมูลที่เหมาะสมสำหรับ Flag (True/False) ใน MySQL
ชนิดข้อมูลที่แนะนำสำหรับคอลัมน์ Flag คือ TINYINT(1) ซึ่งใช้พื้นที่เพียง 1 ไบต์ และสามารถเก็บค่า 0 (False) และ 1 (True) ได้อย่างมีประสิทธิภาพ
yourColumnName TINYINT(1) DEFAULT 1;
ตัวอย่างการใช้งาน
สร้างตารางมีคอลัมน์ isMarried เป็น Flag:
mysql> create table DemoTable (
ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName varchar(20),
isMarried tinyint(1) DEFAULT 1
);
เพิ่มข้อมูล (ไม่ระบุ isMarried จะใช้ค่า DEFAULT 1):
mysql> INSERT INTO DemoTable(ClientName,isMarried) values('Larry',0);
mysql> INSERT INTO DemoTable(ClientName) values('David');
mysql> INSERT INTO DemoTable(ClientName,isMarried) values('Mike',1);
mysql> INSERT INTO DemoTable(ClientName) values('Carol');
ผลลัพธ์:
+----------+------------+-----------+ | ClientId | ClientName | isMarried | +----------+------------+-----------+ | 1 | Larry | 0 | | 2 | David | 1 | | 3 | Mike | 1 | | 4 | Carol | 1 | +----------+------------+-----------+
ตัวเลือกอื่นๆ:
BOOLEAN/BOOL- เป็น Alias ของTINYINT(1)ใช้ได้เหมือนกัน อ่านโค้ดง่ายขึ้นBIT(1)- ใช้พื้นที่ 1 บิต แต่การแสดงผลและการ Query ซับซ้อนกว่า (ต้องใช้+0หรือCAST)ENUM('0','1')- จำกัดค่าได้ชัดเจน แต่ใช้พื้นที่มากกว่า และเป็น String ไม่ใช่ Number
แนะนำ: ใช้ TINYINT(1) หรือ BOOLEAN พร้อม DEFAULT 0 หรือ DEFAULT 1 ตาม Logic ของระบบ