อธิบายประเภทข้อมูล BOOLEAN ของ MySQL: TINYINT(1), TRUE/FALSE, และแนวปฏิบัติที่ดีที่สุด

目次

1. บทนำ

MySQL เป็น RDBMS แบบโอเพนซอร์สที่กลายเป็นตัวเลือกหลักสำหรับการจัดการฐานข้อมูลสำหรับนักพัฒนาหลายคน ในบรรดา data types ของมัน ประเภท BOOLEAN ถูกใช้อย่างแพร่หลายเพื่อแสดงค่าจริง/เท็จในฐานข้อมูล อย่างไรก็ตาม MySQL จัดการประเภท BOOLEAN แตกต่างจากระบบฐานข้อมูลอื่นๆ ดังนั้นคุณต้องระวัง ในบทความนี้ เราจะอธิบายทุกอย่างตั้งแต่การใช้งานพื้นฐานของ MySQL BOOLEAN ไปจนถึงข้อจำกัดและทางเลือกที่เป็นไปได้

2. พื้นฐานของประเภท BOOLEAN

2.1 คำจำกัดของ BOOLEAN และวิธีที่ MySQL นำไปใช้

ใน MySQL ประเภท BOOLEAN ไม่มีอยู่จริงในฐานะประเภทที่แตกต่างกัน แทนที่จะเป็นเช่นนั้น MySQL ใช้ TINYINT(1) BOOLEAN เป็น alias สำหรับ TINYINT(1) และภายใน MySQL จะปฏิบัติต่อ 0 เป็น FALSE และ 1 เป็น TRUE เนื่องจากเหตุนี้ คอลัมน์ที่กำหนดเป็น BOOLEAN สามารถเก็บค่าจำนวนเต็มตั้งแต่ 0 ถึง 255 ได้จริง และ MySQL จะรับรู้ 0 และ 1 เป็นค่าบูลีน

2.2 เหตุผลที่ MySQL ใช้ TINYINT(1)

MySQL ใช้ TINYINT(1) แทนประเภท BOOLEAN ที่ทุ่มเทเพื่อรักษาประสิทธิภาพโดยรวมของระบบและความเข้ากันได้ ประเภท TINYINT เป็นประเภทจำนวนเต็มขนาด 1 ไบต์ ซึ่งช่วยให้ใช้พื้นที่จัดเก็บและหน่วยความจำในฐานข้อมูลได้อย่างมีประสิทธิภาพ นอกจากนี้ เนื่องจาก TINYINT สามารถจัดการได้อย่างสอดคล้องกับประเภทตัวเลขอื่นๆ ใน MySQL จึงช่วยรักษาความสอดคล้องทั่วทั้งระบบ

2.3 การแมประหว่าง 0 และ 1

ใน MySQL ประเภท BOOLEAN ภายในใช้ 0 และ 1 เพื่อแสดง FALSE และ TRUE ซึ่งคล้ายกับวิธีที่ภาษาโปรแกรมมิงหลายภาษาจัดการค่าลอจิก และช่วยให้คุณสามารถใช้ 0 และ 1 แทน TRUE และ FALSE เมื่อทำงานกับฐานข้อมูล อย่างไรก็ตาม คุณควรตระหนักว่าค่าจำนวนเต็มที่ไม่เป็นระบบสามารถถูกแทรกได้

3. ตัวอย่างการใช้ประเภท BOOLEAN

3.1 วิธีการกำหนดคอลัมน์ BOOLEAN ในตาราง

เพื่อกำหนดตารางโดยใช้ประเภท BOOLEAN ให้ระบุประเภทคอลัมน์เป็น BOOLEAN หรือ TINYINT(1) ด้านล่างนี้เป็นตัวอย่างที่กำหนดคอลัมน์ is_active เป็น BOOLEAN

CREATE TABLE example_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  is_active BOOLEAN
);

ในตัวอย่างนี้ คอลัมน์ is_active ถูกกำหนดเป็น BOOLEAN แต่ภายในจะถูกจัดการเป็น TINYINT(1)

3.2 ตัวอย่างการแทรกข้อมูล (โดยใช้ TRUE และ FALSE)

เมื่อแทรกข้อมูลลงในคอลัมน์ BOOLEAN คุณสามารถใช้คำสำคัญ TRUE และ FALSE MySQL จะแมปคำสำคัญเหล่านี้เป็น 1 และ 0 ตามลำดับ

INSERT INTO example_table (is_active) VALUES (TRUE);
INSERT INTO example_table (is_active) VALUES (FALSE);

3.3 ตัวอย่างคำสั่ง SELECT ที่ใช้ BOOLEAN

ในคำสั่ง SELECT คุณสามารถใช้คอลัมน์ BOOLEAN เป็นเงื่อนไข คุณควรใช้อย่างระมัดระวังโดยเข้าใจความแตกต่างระหว่างตัวดำเนินการ = และตัวดำเนินการ IS

-- Using the = operator
SELECT * FROM example_table WHERE is_active = TRUE;

-- Using the IS operator
SELECT * FROM example_table WHERE is_active IS TRUE;

หากคุณใช้ตัวดำเนินการ = จะรับรู้เฉพาะ 1 และ 0 เป็น TRUE และ FALSE อย่างไรก็ตาม หากคุณใช้ตัวดำเนินการ IS ค่าจำนวนเต็มอื่นๆ นอกจาก 1 อาจถูกรับรู้เป็น TRUE ดังนั้นคุณต้องระวัง

4. ข้อจำกัดและบันทึกสำคัญเกี่ยวกับประเภท BOOLEAN

4.1 ข้อจำกัดที่เกิดจาก BOOLEAN เป็น alias ของ TINYINT(1)

เนื่องจาก BOOLEAN เป็น alias ของ TINYINT(1) จริงๆ มันสามารถเก็บค่าจำนวนเต็มใดๆ จาก 0 ถึง 255 ได้ กล่าวอีกนัยหนึ่ง ค่าอื่นๆ นอกจาก 1 หรือ 0 สามารถถูกแทรกเข้าไปในคอลัมน์ BOOLEAN เพื่อรักษาความสมบูรณ์ของข้อมูล คุณควรใช้การตรวจสอบที่เหมาะสมเมื่อแทรกข้อมูล

4.2 การจัดการค่าค่าว่าง NULL และการใช้ NOT NULL

โดยค่าเริ่มต้น คอลัมน์ BOOLEAN ของ MySQL อนุญาตให้มีค่าค่าว่าง NULL หากคุณไม่ต้องการอนุญาตให้มีค่าค่าว่าง NULL คุณต้องระบุ NOT NULL อย่างชัดเจนเมื่อกำหนดคอลัมน์

CREATE TABLE example_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  is_active BOOLEAN NOT NULL
);

ในตัวอย่างนี้ ค่าค่าว่าง NULL ไม่สามารถถูกแทรกเข้าไปในคอลัมน์ is_active

4.3 ความแตกต่างจาก Standard SQL

.MySQL จัดการประเภท BOOLEAN แตกต่างจากระบบฐานข้อมูลอื่นและมาตรฐาน SQL ในหลายระบบฐานข้อมูลอื่น BOOLEAN ได้รับการสนับสนุนโดยตรงและโดยทั่วไปสามารถเก็บค่าได้เพียง TRUE และ FALSE เท่านั้น อย่างไรก็ตามใน MySQL BOOLEAN ถูกจำลองโดยใช้ TINYINT(1) ดังนั้นคุณต้องระมัดระวังเมื่อย้ายข้อมูลไปยังฐานข้อมูลอื่น

5. ทางเลือกสำหรับประเภท BOOLEAN

5.1 การตรวจสอบประเภทที่เข้มงวดขึ้นด้วย ENUM

หากคุณต้องการการตรวจสอบประเภทที่เข้มงวดกว่าที่ BOOLEAN ให้ได้ การใช้ประเภท ENUM เป็นหนึ่งในตัวเลือกที่เป็นไปได้ ด้วย ENUM คุณสามารถจำกัดค่าที่อนุญาตในคอลัมน์ให้เป็นชุดเฉพาะได้

CREATE TABLE example_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  is_active ENUM('FALSE', 'TRUE') NOT NULL
);

ด้วยวิธีนี้ คอลัมน์ is_active จะสามารถเก็บได้เฉพาะค่า ‘TRUE’ หรือ ‘FALSE’ เท่านั้น และไม่อนุญาตค่าอื่นใด

5.2 ตัวอย่างการใช้ ENUM แทน BOOLEAN

โดยการใช้ ENUM คุณสามารถจัดการค่าจริง/เท็จได้พร้อมกับรักษาความสมบูรณ์ของข้อมูลได้ดีกว่าคอลัมน์ BOOLEAN อย่างไรก็ตาม เนื่องจาก ENUM เก็บข้อมูลเป็นสตริง อาจทำให้ประสิทธิภาพการใช้พื้นที่จัดเก็บน้อยกว่าการใช้ BOOLEAN (TINYINT(1)) ด้วยเหตุนี้จึงสำคัญที่จะเลือกประเภทที่เหมาะสมที่สุดตามความต้องการของแอปพลิเคชันของคุณ

6. กรณีการใช้งานและแนวปฏิบัติที่ดีที่สุดสำหรับ BOOLEAN

6.1 เมื่อ BOOLEAN เป็นตัวเลือกที่เหมาะสม

ประเภท BOOLEAN (หรือ TINYINT(1)) มีประโยชน์สำหรับการจัดการแฟล็กและสวิตช์ ตัวอย่างเช่น เหมาะสำหรับการเก็บข้อมูลแบบไบนารี (TRUE/FALSE) เช่น ผู้ใช้ที่ใช้งานอยู่หรือไม่ หรือสินค้ามีสต็อกหรือไม่

6.2 การใช้ดัชนีบนคอลัมน์ BOOLEAN

การสร้างดัชนีบนคอลัมน์ BOOLEAN สามารถปรับปรุงประสิทธิภาพการสืบค้นได้ อย่างไรก็ตาม ประสิทธิภาพของการทำดัชนีบนคอลัมน์ BOOLEAN ขึ้นอยู่กับความหลากหลายของค่าที่อยู่ในคอลัมน์ (cardinality) ตัวอย่างเช่น หากบันทึกส่วนใหญ่มีค่า TRUE ดัชนีอาจให้ประโยชน์จำกัด

6.3 แนวปฏิบัติที่ดีที่สุดสำหรับการรักษาความสมบูรณ์ของข้อมูล

เมื่อใช้ประเภท BOOLEAN ให้พิจารณาแนวปฏิบัติดังต่อไปนี้เพื่อรักษาความสมบูรณ์ของข้อมูล

  • หากคุณไม่ต้องการให้คอลัมน์รับค่า NULL ให้ระบุ NOT NULL
  • ใช้การตรวจสอบความถูกต้องที่เหมาะสมเมื่อแทรกข้อมูลเพื่อป้องกันไม่ให้ค่าอื่นนอกจาก 0 และ 1 ถูกแทรกเข้าไป
  • พิจารณาใช้ ENUM เพื่อการตรวจสอบประเภทที่เข้มงวดขึ้น

7. สรุป

การเข้าใจและใช้ประเภท BOOLEAN ใน MySQL อย่างถูกต้องเป็นสิ่งสำคัญอย่างยิ่งสำหรับการออกแบบฐานข้อมูลและการพัฒนาแอปพลิเคชัน เนื่องจาก BOOLEAN ถูกจำลองเป็น TINYINT(1) คุณต้องระมัดระวังเพราะอาจมีการแทรกค่าจำนวนเต็มใด ๆ ได้ หากต้องการการตรวจสอบประเภทที่เข้มงวดขึ้น การพิจารณาใช้ ENUM ก็เป็นแนวคิดที่ดีเช่นกัน