Почему SQL Server не поддерживает неподписанный тип данных?
Я специально думаю о unsigned int
.
вот практический пример: что вы делаете, когда ваш столбец идентификаторов исчерпан? Это можно либо пойти BigInt
(хранение 8 байт вместо 4) или рефакторинг приложения для поддержки отрицательных целых чисел и даже для создания собственных правил, как указано в ответ; ни один из этих вариантов является оптимальным.
UInt
было бы идеальным решением, но SQL Server не предлагать его (где MySQL делает).
Я понимаю, что неподписанные типы данных не являются частью стандарта SQL (SQL-2003), но все равно кажется мне пустой тратой времени.
в чем причина не включать их (в SQL Server или в стандарте)?
3 ответа:
Если бы я должен был догадаться, я бы сказал, что они пытаются избежать распространения типов. Вообще говоря, нет ничего, что беззнаковое целое число может сделать, что знаковое целое число не может сделать. Что касается случая, когда вам нужно число между 2147483648 и 4294967296 вы, вероятно, должны перейти к 8-байтному целому числу, так как число также в конечном итоге превысит 4294967296.
для этой цели можно использовать -2,147,483,648 в качестве начального значения.
Identity(-2147483648, 1)
Я нашел аналогичный вопрос на Microsoft Connect.
ответ от Джима Хогга (менеджер программ) имеет некоторые pro и con для добавления unsigned int. основной con-это правила для реализации неявных преобразований типов, которые становятся кошмаром, чтобы получить право.
запрос был закрыт как "не исправить".