Почему SQL Server не поддерживает тип данных без знака? - PullRequest
71 голосов
/ 15 декабря 2010

Я специально думаю о неподписанном int.

Вот практический пример: что вы делаете, когда ваш столбец идентификаторов становится максимальным? Можно либо перейти BigInt (8 байт вместо 4), либо реорганизовать приложение для поддержки отрицательных целых чисел, и даже создать свои собственные правила, как указано в в этом ответе ; ни один из этих вариантов не является оптимальным.

UInt было бы идеальным решением, но SQL Server не предлагает его (там, где MySQL).

Я понимаю, что неподписанные типы данных не являются частью стандарта SQL (SQL-2003), но все еще кажутся мне пустой тратой.

В чем причина не включать их (в SQL Server или в стандарт)?

Ответы [ 3 ]

54 голосов
/ 15 декабря 2010

Если бы мне пришлось угадывать, я бы сказал, что они пытаются избежать распространения типов. Вообще говоря, целое число без знака не может сделать ничего, чего не может сделать целое число со знаком. Что касается случая, когда вам нужно число от 2147483648 до 4294967296, вам, вероятно, следует перейти к 8-байтовому целому числу, поскольку число также в конечном итоге превысит 4294967296.

44 голосов
/ 09 января 2012

Для этой цели вы можете использовать -2 147 483 648 в качестве начального значения.

Identity(-2147483648, 1)
36 голосов
/ 08 августа 2013

Я нашел похожий вопрос в Microsoft Connect.

В ответе Джима Хогга (менеджера программы) есть некоторые плюсы и минусы для добавления неподписанных целых чисел. Основным недостатком является то, что правила реализации неявных преобразований типов становятся настоящим кошмаром.

Запрос был закрыт как "Не исправлю".

...