Apakah kolom bit SQL Server benar-benar menggunakan seluruh ruang nilai byte?

20

Saya mencari-cari SSMS dan melihat "ukuran" INTkolom saya adalah 4 byte (diharapkan) tapi saya agak terkejut melihat BITkolom saya adalah byte penuh.

Apakah saya salah mengerti apa yang saya lihat?

Nate
sumber
1
Saya merasa beruntung bahwa kolom BIT disejajarkan pada batas byte, bukan batas kata.
Mike Sherrill 'Cat Recall'

Jawaban:

17

Berapa banyak kolom bit yang telah Anda tetapkan dalam tabel? Saya menemukan ini di MSDN, katanya 8 atau kurang bit kolom disimpan sebagai satu byte.

http://msdn.microsoft.com/en-us/library/ms177603.aspx

SQLRockstar
sumber
Diterima untuk sumber MSDN yang gagal saya temukan. Terima kasih.
Nate
14

Iya nih.

Jika Anda hanya memiliki satu bitkolom dalam tabel maka penyimpanan menggunakan a bytetetapi hingga 8 bitkolom dapat disimpan dalam byte yang sama sehingga 7 berikutnya "bebas" dalam hal itu.

Ada juga 1 bit per kolom kebutuhan penyimpanan untuk NULL_BITMAP(lagi dibulatkan ke byte berikutnya). Di halaman data ini berisi bituntuk semua kolom terlepas dari apakah mereka mengizinkan NULL(dengan pengecualian kolom nullable ditambahkan kemudian sebagai metadata hanya berubah melalui ALTER TABLEmana baris belum diperbarui)

Martin Smith
sumber
9

BITmenggunakan satu byte per baris, tetapi Anda dapat mengemas hingga 8 BITbidang ke dalam penyimpanan satu byte itu.

Jadi field pertama berharga satu byte, tetapi tujuh berikutnya gratis !

JNK
sumber