บิตกับคอลัมน์บูลีน


12

เนื่องจากบิตฟิลด์นั้นเป็นเพียงการแสดงข้อมูลแบบไบนารี่และจำเป็นต้องทำการสอบถามในลักษณะที่ "แปลก" เล็กน้อย

จริง ๆ แล้วมันให้ประโยชน์ใด ๆ โดยใช้เขตข้อมูลบิตสำหรับค่าบูลีนหรือไม่ จากสิ่งที่ฉันเห็นมันดูเหมือนว่าจะแนะนำว่าพื้นที่นั้นเป็นผลประโยชน์ที่แท้จริงเท่านั้น

คำตอบ:


14

ส่วนตัวฉันจะใช้BOOLEANสำหรับค่าบูลีน แต่เก็บไว้ในใจข้อแม้ที่ว่าใน MySQL, BOOLEANเป็นเพียงคำพ้องความหมายของ[src]TINYINT(1)

แน่นอนนี้หมายความว่าคุณสามารถมีค่าอื่นที่ไม่ใช่ 0 หรือ 1 หากคุณไม่ระวัง เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถใช้นามแฝงTRUEและFALSEเมื่อแทรกและอัปเดตข้อมูลตามแผนที่เหล่านั้นเป็น 1 และ 0 ตามลำดับ

เพื่อประโยชน์ของการเป็นที่สมบูรณ์ก่อนที่จะ 5.0.3 ที่ยังเป็นไวพจน์ของBITTINYINT(1)


1

ถ้าฉันเข้าใจถูกต้อง BOOLEAN จะใช้ 1 ไบต์ต่อคอลัมน์เสมอ แต่ BIT (n) จะใช้ไม่กี่ไบต์ที่จำเป็นสำหรับเก็บจำนวนบิตที่กำหนด

ดังนั้น BIT อาจประหยัดพื้นที่ แต่บูลีนนั้นทำงานได้ง่ายกว่าถ้าคุณต้องการเคียวรีด้วย SQL

หากฉันมีชุดธงที่แอปพลิเคชันเข้าใจและเก็บไว้ในฟิลด์เดียวในแอปพลิเคชันฉันจะใช้ BIT (n) อย่างไรก็ตามหากฉันมีคอลัมน์ที่จำเป็นต้องสอบถามจาก SQL ฉันจะใช้บูลีน

ตัวอย่างจะเป็นแอปพลิเคชันที่ใช้การตั้งค่าสถานะเพื่อบันทึกเหตุการณ์สัปดาห์ควรรันบนกับบิตต่อสัปดาห์เป็น 1 ถ้าเหตุการณ์ทำงานในสัปดาห์ที่กำหนด ถ้าข้อมูลจะถูกทำให้ง่ายต่อการสืบค้นในฐานข้อมูลมันจะ“ ปกติ” ทั่วทั้งสองตาราง แต่ถ้าข้อมูลที่ต้องการเก็บไว้ในฐานข้อมูลนั้นจะถูกเก็บไว้ในรูปแบบที่ดีที่สุดแอปพลิเคชันที่ใช้มัน ใน.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.