Nếu trường có chiều rộng cố định, lưu trữ NULL sẽ lấy cùng một không gian với bất kỳ giá trị nào khác - chiều rộng của trường.
Nếu trường có chiều rộng thay đổi, giá trị NULL không chiếm không gian.
Ngoài không gian cần thiết để lưu trữ giá trị null, còn có chi phí để có một cột có thể null. Đối với mỗi hàng, một bit được sử dụng cho mỗi cột có thể null để đánh dấu liệu giá trị của cột đó có phải là rỗng hay không. Điều này đúng cho dù cột có độ dài cố định hay thay đổi.
Lý do cho sự khác biệt mà bạn đã quan sát thấy trong thông tin từ các nguồn khác:
-
Mở đầu của bài viết đầu tiên là một chút sai lệch. Bài viết không nói về chi phí lưu trữ giá trị NULL, mà là chi phí để có khả năng để lưu trữ một NULL (tức là chi phí tạo một cột có giá trị rỗng). Đúng là tốn một khoảng không gian lưu trữ để làm cho một cột có thể trở thành null, nhưng khi bạn đã làm điều đó thì sẽ tốn ít dung lượng hơn để lưu trữ NULL so với việc lưu trữ một giá trị (đối với các cột có chiều rộng thay đổi).
-
Liên kết thứ hai dường như là một câu hỏi về Microsoft Access. Tôi không biết chi tiết về cách Access lưu trữ NULL nhưng tôi sẽ không ngạc nhiên nếu nó khác với SQL Server.