[sql] SQL Server가 서명되지 않은 데이터 형식을 지원하지 않는 이유는 무엇입니까?

나는 특별히 unsigned에 대해 생각하고 int있습니다.

다음은 실용적인 예입니다. ID 열이 최대 값을 초과하면 어떻게합니까? 이동 BigInt(4 대신 8 바이트 저장)하거나 음의 정수를 지원하도록 응용 프로그램을 리팩터링 하고이 답변에 표시된대로 자체 규칙을 만들 수도 있습니다 . 이러한 옵션 중 어느 것도 최적이 아닙니다.

UInt 이상적인 솔루션이지만 SQL Server는이를 제공하지 않습니다 (MySQL이 제공하는 경우).

서명되지 않은 데이터 유형은 SQL 표준 (SQL-2003)의 일부가 아니지만 여전히 저에게 낭비 인 것처럼 보입니다.

이러한 항목을 포함하지 않은 이유는 무엇입니까 (SQL Server 또는 표준에 포함)?



답변

추측해야한다면 유형의 확산을 피하기 위해 노력하고 있다고 말할 수 있습니다. 일반적으로 말하면 부호없는 정수가 할 수있는 것 중 부호있는 정수가 할 수없는 것은 없습니다. 2147483648에서 4294967296 사이의 숫자가 필요한 경우에는 숫자가 결국 4294967296을 초과하므로 8 바이트 정수로 이동해야합니다.


답변

이를 위해 -2,147,483,648을 시드 값으로 사용할 수 있습니다.

Identity(-2147483648, 1)


답변

Microsoft Office Dev Center에서 비슷한 질문 찾았습니다 .

Jim Hogg (프로그램 관리자)의 답변에는 서명되지 않은 int를 추가하는 데 대한 장단점이 있습니다. 가장 큰 단점은 암시 적 형식 변환을 구현하는 규칙이 제대로 작동하는 데 악몽이된다는 것입니다.

요청이 “Wo n’t Fix”로 종료되었습니다.


답변

표준이 아니기 때문에 SIGNED 및 UNSIGNED 키워드를 지원하지 않습니다. SQL 표준에서는 모든 숫자 유형이 서명됩니다.

UNSIGNED (및 기본값 인 SIGNED)는 더 높은 부호없는 숫자를 동일한 바이트 수에 저장하고 음수를 허용하지 않는 데 유용 할 수있는 MySQL 확장입니다.


답변