4-байтовый Int без знака для Sql Server 2008? - PullRequest
1 голос
/ 26 апреля 2010

Я понимаю, что есть несколько вопросов по этому поводу на SO, но я еще не нашел окончательного ответа "да, вот как ..."

Итак, еще раз: как можно сохранить целочисленное значение без знака (32-разрядное значение или 32-разрядное растровое изображение) в 4-байтовом поле в SQL Server?

Вот идеи, которые я видел:

1) Использовать смещение -1 * 2 ^ 31 для всех значений

  • Недостатки: перед чтением / записью / агрегированием необходимо выполнить математические вычисления для значений.

2) Используйте 4 поля tinyint

  • Недостатки: необходимо объединить значения для выполнения любых операций

3) Использовать двоичный код (4)

  • Недостатки: фактически используется 4 + 2 байта пространства (Правка: varbinary (4) использует 4 + 2, двоичный (4) использует только 4)
  • Нужно работать в SqlBinary или приводить в / из других типов

1 Ответ

2 голосов
/ 26 апреля 2010

IMO, у вас есть правильные ответы на хранение 2 ^ 32 положительных значений в 4 байта: либо стандартный int, и вы выполняете математические вычисления, либо binary(4), который, в отличие от того, что вы сказали, будет потреблять только 4 байты пространства. (Только varbinary потребует 2 дополнительных байта памяти). Серия столбцов tinyint или smallint была бы неоправданно громоздкой ИМО.

Конечно, существует другое решение для хранения 2 ^ 32 положительных значений, но оно занимает восемь байтов: bigint с проверочным ограничением. Учитывая, насколько дешевы сегодня хранилище и память, IMO, это самое простое и дешевое решение с учетом программных циклов, которые вам придется перепрыгивать с другими решениями, однако, очевидно, у вас есть причина желать сэкономить дополнительные 4 байта в каждой строке. .

...