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