Каков размер типов данных с возможностью NULL в СУБД Microsoft SQL Server?Типы данных NULL для SQL Server
Например, значение non-nullable int должно занимать 4 байта, сколько места будет выделено для столбца с нулевым значением?
Subquestions: nullable int, char (N), nvarchar (N) - Я предполагаю, что они могут храниться по-разному.
То, что я прочитал:
- Where to find the size of SQL Server data types - хороший способ получить список SQL типов и их размер для моей версии сервера SQL. Но не говорит ни слова об типах с нулевым значением.
- http://msdn.microsoft.com/en-us/library/ms189124.aspx - существует формула для вычисления требуемого пространства столбцов переменного размера: «Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size». Это очень странно: почему он содержит множитель * 2 (ничего не сказано о nvarchar - эта формула предназначена для всех типов переменных размеров, которые исходят из объяснения); это должна быть опечатка, которая добавляется Max_Var_Size, а не умножается; и, наконец, он содержит +2 байта для хранения длины значения, но снова не содержит ничего для хранения значений NULL. Насколько я понимаю, можно использовать 3 оставшихся бита длиной 2 байта для хранения идентификатора NULL, но действительно ли он хранится таким образом?
- How much size "Null" value takes in SQL Server - как для меня верхние ответы сбивают с толку. @Mark Byers сказал: «Если фиксированное фиксированное значение поля NULL занимает то же пространство, что и любое другое значение - ширина поля», но невозможно сохранить стандартный целочисленный интервал значений и дополнительное значение NULL в том же количестве биты. Затем «Если поле переменной ширины, значение NULL не занимает пробела» - повторное хранение NULL не может занимать места вообще - ему нужно сохранить некоторый маркер для нулевого значения. Подобная путаница с другими ответами там: кто-то говорит, что он принимает 2 дополнительных байта, кто-то - это только 1 байт.
- http://home.clara.net/drdsl/MSSQL/DataTypes.html - красивый стол с размерами типов, но опять-таки ничего не посвященный значениям NULL.
Хорошая ссылка, спасибо. Впервые я услышал о редких столбцах =). Я не уверен, что вы можете подтвердить, но действительно ли это 1 дополнительный бит, или он занимает весь байт? Поскольку тип данных бит на сервере SQL фактически использует 1 байт. –
Btw, для разреженных столбцов, рассмотрим [это] (http://technet.microsoft.com/en-us/library/cc280604.aspx), часть _Создание экономии места по типу данных. – OzrenTkalcecKrznaric
@OleksandrPshenychnyy - SQL Server упакует бит NULL-флагов в байты, поэтому до 8 столбцов с нулевым значением несут только однобайтовые служебные данные. – HABO