ฉันแหย่ไปรอบ ๆ SSMS และสังเกตว่า "ขนาด" ของINTคอลัมน์ของฉันคือ 4 ไบต์ (คาดว่า) แต่ฉันก็ตกใจเล็กน้อยเมื่อเห็นว่าBITคอลัมน์ของฉันเป็นไบต์ทั้งหมด
ฉันเข้าใจผิดหรือเปล่าว่ากำลังดูอะไรอยู่?
ฉันแหย่ไปรอบ ๆ SSMS และสังเกตว่า "ขนาด" ของINTคอลัมน์ของฉันคือ 4 ไบต์ (คาดว่า) แต่ฉันก็ตกใจเล็กน้อยเมื่อเห็นว่าBITคอลัมน์ของฉันเป็นไบต์ทั้งหมด
ฉันเข้าใจผิดหรือเปล่าว่ากำลังดูอะไรอยู่?
คำตอบ:
คุณมีคอลัมน์บิตจำนวนเท่าใดในตาราง ฉันพบสิ่งนี้ใน MSDN ว่ามีคอลัมน์ 8 บิตหรือน้อยกว่านั้นถูกจัดเก็บเป็นหนึ่งไบต์
ใช่.
หากคุณมีเพียงหนึ่งbitคอลัมน์ในตารางการจัดเก็บที่ใช้byteแต่ไม่เกิน 8 bitคอลัมน์สามารถเก็บไว้ในไบต์เดียวกันดังนั้น 7 ถัดไปจะเป็น "ฟรี" ในส่วนนั้น
นอกจากนี้ยังมีความต้องการที่เก็บข้อมูล 1 บิตต่อคอลัมน์สำหรับNULL_BITMAP(ปัดเศษขึ้นอีกเป็นไบต์ถัดไป) ในหน้าข้อมูลนี้มีbitคอลัมน์สำหรับทุกคอลัมน์โดยไม่คำนึงว่าจะอนุญาตหรือไม่NULL( ยกเว้นคอลัมน์ที่สามารถลบได้ที่เพิ่มในภายหลังเนื่องจากข้อมูลเมตาเปลี่ยนเฉพาะในALTER TABLEกรณีที่แถวยังไม่ได้อัปเดต)
BITใช้หนึ่งไบต์ต่อแถว แต่คุณสามารถแพ็คได้ถึง 8 BITเขตข้อมูลลงในที่เก็บข้อมูลหนึ่งไบต์
ดังนั้นฟิลด์แรกมีค่าใช้จ่ายหนึ่งไบต์ แต่เจ็ดฟิลด์ถัดไปนั้นฟรี !