Sql server 4 байта unsigned int

Кто-нибудь знает о какой-либо работе, по которой я могу сохранить целые числа без знака (от 0 до 4294967295), просто используя 4 байта вместо 8 байтов и bigint?

Я знаю, что мы можем создавать определяемые пользователем типы данных и создавать ограничение на них, чтобы не допускать отрицательных значений, но это все еще не позволяет мне вводить значения более 2147483647. Я хочу использовать только 4 байта, но иметь возможность сохранять целочисленные значения больше чем 2147483647, но менее 4294967295.

Возможный дубликат: 4 байта unsigned int в SQL Server?

Ответ 1

Нет неподписанного типа, доступного вам, поэтому вы можете создать его с помощью UDT или выбрать более широкий тип данных. Если вы сделаете это в UDT, вы снова будете превышать 4 байта.

Крайним взломом было бы автоматически применить смещение к вашему сохраненному значению после того, как вы его прочитали, добавив -2 ^ 31, но это реальный хакерский способ обойти это и запутать для любого, кто просматривает код и т.д., а не упомянуть о возможном недостатке ошибок/вещей. Я вообще не рекомендовал бы взломать.

Ответ 2

Используйте двоичный файл (4). Оберните его в UDT, если хотите.

Ответ 3

Это решение может быть немного запутанным, но будет работать в ваших целях. Сохранение значений больше 2 ^ 31-1, поскольку целые числа приводят к переполнению и отображаются как отрицательное число. Вы все равно можете хранить свои значения как целые числа и переинтерпретировать их в коде.

Ответ 4

Как упоминалось RBarry, попробуйте использовать это:

declare @bi binary(4) = cast(2147483648 as bigint)

declare @i int = cast(@bi as binary(4))

select @i  

declare @bi2 bigint = cast(cast(@i as binary(4)) as bigint)

select @bi2