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

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

TINYINT(1) และ BOOLEAN ใน MySQL: จริงๆ แล้วเหมือนกัน

สรุปสั้นๆ: ใน MySQL ไม่มีความแตกต่างกัน ระหว่าง TINYINT(1) และ BOOLEAN (หรือ BOOL) เพราะ MySQL แปลง BOOLEAN เป็น TINYINT(1) ภายในโดยอัตโนมัติ

การทดสอบยืนยัน

1. สร้างตารางด้วย BOOLEAN

CREATE TABLE DemoTable (
    isMarried BOOLEAN
);

2. ตรวจสอบโครงสร้างตาราง

DESC DemoTable;

ผลลัพธ์:

+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| isMarried | tinyint(1) | YES  |     | NULL    |       |
+-----------+------------+------+-----+---------+-------+

เห็นชัดว่า MySQL แปลง BOOLEAN ให้เป็น tinyint(1) แล้ว

3. เพิ่มข้อมูลด้วย TRUE/FALSE

INSERT INTO DemoTable VALUES (TRUE);
INSERT INTO DemoTable VALUES (FALSE);

4. ดูข้อมูลที่จัดเก็บ

SELECT * FROM DemoTable;

ผลลัพธ์:

+-----------+
| isMarried |
+-----------+
| 1         |
| 0         |
+-----------+

ค่า TRUE ถูกเก็บเป็น 1 และ FALSE เป็น 0

รายละเอียดทางเทคนิค

ลักษณะTINYINT(1)BOOLEAN/BOOL
พื้นที่จัดเก็บ1 ไบต์1 ไบต์ (แปลงเป็น TINYINT(1))
ช่วงค่า-128 ถึง 127 (SIGNED)
0 ถึง 255 (UNSIGNED)
0 (FALSE) และ 1 (TRUE)
ค่าคงที่ใช้ตัวเลขใช้ TRUE/FALSE (แปลงเป็น 1/0)
การใช้ดัชนี (Index)ได้ได้ (เหมือนกัน)

ข้อแนะนำในการใช้งาน

  • ใช้ BOOLEAN/BOOL เมื่อต้องการความชัดเจนทางความหมาย (Semantic clarity) - บอกได้เลยว่าคอลัมน์นี้เป็นจริง/เท็จ
  • ใช้ TINYINT(1) เมื่อต้องการควบคุมรายละเอียดมากขึ้น เช่น ต้องการ UNSIGNED หรือเก็บค่าอื่นนอกจาก 0/1
  • ทั้งสองตัวเลือกใช้ INDEX ได้เหมือนกัน
  • ใน Application Layer ควรแปลง 0/1 ให้เป็น boolean จริงของภาษาโปรแกรม (true/false)

ข้อผิดพลาดที่พบบ่อย

คิดว่า BOOLEAN จะเก็บได้แค่ TRUE/FALSE เท่านั้น → ผิด MySQL อนุญาตให้ INSERT ค่าตัวเลขอื่นได้ (เช่น 2, 5, -1) แต่จะแปลงเป็น 1 (TRUE) ทั้งหมด ยกเว้น 0