Tôi đã chọc vào SSMS và nhận thấy "kích thước" của INTcác cột của tôi là 4 byte (dự kiến) nhưng tôi hơi sốc khi thấy BITcác cột của mình là một byte toàn bộ.
Tôi đã hiểu sai những gì tôi đang nhìn?
Tôi đã chọc vào SSMS và nhận thấy "kích thước" của INTcác cột của tôi là 4 byte (dự kiến) nhưng tôi hơi sốc khi thấy BITcác cột của mình là một byte toàn bộ.
Tôi đã hiểu sai những gì tôi đang nhìn?
Câu trả lời:
Có bao nhiêu cột bit bạn đã xác định trong bảng? Tôi đã tìm thấy điều này trên MSDN, nó nói 8 cột bit hoặc ít hơn được lưu trữ dưới dạng một byte.
Vâng.
Nếu bạn chỉ có một bitcột trong bảng thì bộ lưu trữ sử dụng bytenhưng tối đa 8bit cột có thể được lưu trữ trong cùng một byte để 7 cột tiếp theo là "miễn phí" trong khía cạnh đó.
Ngoài ra còn có nhu cầu lưu trữ 1 bit cho mỗi cột cho NULL_BITMAP(một lần nữa được làm tròn đến byte kế tiếp). Trong các trang dữ liệu, phần này chứa một bitcột cho tất cả các cột bất kể chúng có cho phép hay không NULL( ngoại trừ các cột không thể được thêm sau này vì siêu dữ liệu chỉ thay đổi thông qua ALTER TABLEnơi hàng chưa được cập nhật)