Только целое число и шестнадцатеричное число непосредственно, я боюсь (ECMA 334v4):
9.4.4.2 Целочисленных литерала Целочисленные литералы используются для записи значений интервала типов, uint, долго, и ulong. Целочисленные литералы имеют две возможных формы: десятичный и шестнадцатеричный.
Для парсинга можно использовать:
int i = Convert.ToInt32("01101101", 2);
В разреженном столбце не используется 4-кратный объем места для хранения значения, он использует (фиксированный) 4 дополнительных байта на каждое ненулевое значение. (Как вы уже сказали, NULL занимает 0 пробелов.)
Таким образом, ненулевое значение, хранящееся в столбце бит , будет 1 бит + 4 байта = 4,125 байта. Но если 99% из них имеют значение NULL, это все равно чистая экономия.
Ненулевое значение, хранимое в столбце GUID (UniqueIdentifier) , составляет 16 байтов + 4 байта = 20 байтов. Таким образом, если только 50% из них имеют значение NULL, это все равно чистая экономия.
Таким образом, «ожидаемая экономия» сильно зависит от вида столбца, о котором мы говорим, и вашей оценки того, какое соотношение будет нулевым по сравнению с ненулевым. Столбцы переменной ширины (varchars), вероятно, немного сложнее точно предсказать.
На этой странице электронной документации есть таблица, показывающая , какой процент различных типов данных должен быть нулевым
Итак, , когда следует использовать разреженный столбец? Когда вы ожидаете, что значительный процент строк будет иметь значение NULL. Некоторые примеры, которые приходят на ум:
Сохранение нуля в разреженном столбце вообще не занимает места.
Для любого внешнего приложения столбец будет вести себя одинаково
Разреженные столбцы отлично работают с отфильтрованными индексами, как и вы потребуется только создать индекс для работы с непустыми атрибутами в столбце.
Вы можете создать набор столбцов над разреженными столбцами, который возвращает xml-клип всех ненулевых данных из столбцов, охватываемых установлен. Набор столбцов ведет себя как сам столбец. Примечание: вы можете иметь только один набор столбцов для каждой таблицы.
Обе функции отслеживания измененных данных и транзакционной репликации работают, но не функция наборов столбцов.
Недостатки
Если в разреженном столбце есть данные, потребуется 4 больше байтов, чем в обычном столбце, например, даже бит (обычно 0,125 байта) составляет 4,125 байта, а уникальный идентификатор увеличивается с 16 до 20 байтов.
Не все типы данных могут быть разреженными: текст, ntext, изображение, отметка времени, определяемый пользователем тип данных, геометрия или география или varbinray (max) с атрибутом FILESTREAM не могут быть разреженными. (Изменено 17/5/2009, спасибо Алекс за обнаружение опечатки)
вычисляемые столбцы не могут быть разреженными (хотя разреженные столбцы могут участвовать в вычислениях в другом вычисляемом столбце)
Вы не можете применять правила или использовать значение по умолчанию значения.
Разреженные столбцы не могут быть частью кластеризованного индекса. Если вам нужно сделать это, используйте вычисляемый столбец на основе разреженного столбца и создайте для него кластеризованный индекс (что не позволяет объекту).
Репликация слиянием не работает.
Сжатие данных не работает .
Доступ (чтение и запись) к разреженным столбцам дороже, но мне не удалось найти точных цифр по этому поводу.
Вы неправильно читаете - он никогда не занимает в 4 раза больше места.
В частности, указано 4 * (4 байта, см. Сноску), а не 4x (умножить на 4). Единственный случай, когда это ровно в 4 раза больше места, - это char (4), который позволит сэкономить, если NULL существуют более 64% времени.
«* Длина равна среднему значению данных, содержащихся в типе, плюс 2 или 4 байта.»