source

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

gigabyte 2023. 4. 9. 21:34
반응형

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

으로 '부호 없는'을 생각하고 .int

이치노아이덴티티 열이 최대치를 넘었을 때 어떻게 해야 합니까? 쪽이든 갈 수 BigInt(4바이트가 아닌 8바이트의 스토리지) 또는 응용 프로그램을 리팩터링하여 음의 정수를 지원하고 이 답변에 표시된 자체 규칙을 만들 수도 있습니다. 이 두 옵션 모두 최적입니다.

UIntSQL Server를 사용하다(MySQL).

서명되지 않은 데이터 유형은 SQL 표준(SQL-2003)의 일부가 아니지만 여전히 낭비처럼 느껴집니다.

(SQL Server 또는 표준)에 포함되지 않는 이유는 무엇입니까?

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

Identity(-2147483648, 1)

굳이 추측하자면, 그들은 활자의 확산을 피하려고 애쓰고 있는 것 같습니다.일반적으로 부호 없는 정수가 할 수 있는 일은 부호 있는 정수가 할 수 없는 일입니다.2147483648에서 4294967296 사이의 숫자가 필요한 경우에는 8바이트의 정수로 해야 합니다.이는 최종적으로 4294967296을 초과할 것이기 때문입니다.

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

Jim Hogg(프로그램 매니저)의 답변에는 서명되지 않은 int를 추가하는 것에 대한 몇 가지 찬반 의견이 있습니다.주요 단점은 암묵적 유형 변환을 구현하기 위한 규칙이 올바른 선택을 위한 악몽이 된다는 것입니다.

요청이 "수정 안 함"으로 닫혔습니다.

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

UNSIGNED(및 SIGNED(기본값))는 MySQL 확장자로, 동일한 바이트 양에 상위 부호 없는 숫자를 저장하여 음수를 허용하지 않습니다.

예를 들어 32비트(8바이트) int를 예로 들어 보겠습니다.32비트 int 의 범위는 -2^31 ~2^31-1 입니다.할당한 값을 기록하는 데 31비트가 필요하고 값 부호를 기록하는 데 1비트만 필요합니다.

그래서 당신의 질문에 대한 대답은 "불필요"입니다.할당한 모든 값이 양수인데도 값당 1비트만 낭비됩니다.값당 1비트만 절약하기 위해 새 데이터 유형을 생성하는 것은 스토리지 공간을 최적화하는 좋은 방법이 아닙니다.

DB를 최소 ID(-2147483648, 1)로 설정합니다.

그런 다음 .net UInt64 변수에 로드할 때 2147483648을 추가합니다. -2147483648은 0이 되고 -1000000000은 1147483648이 됩니다.

  • 그러나 대부분의 경우 내부 키가 클라이언트에 노출되어서는 안 됩니다.일반적으로 'ABCKey1'과 같은 다른 키를 사용합니다.

그러나 데이터형이 시스템 전체의 99%에서 충분히 크다는 것에 동의합니다.더 필요한 경우 GUID를 사용할 수 있지만, 다음 순차 GUID를 사용하지 않는 한 인덱스의 GUID를 사용할 수 없습니다.

SQL Server에서 서명되지 않은 번호가 필요한 경우가 있습니다.예를 들어 이진수 값에 해당하는 값을 정수로 저장해야 할 수 있습니다.이 경우 32비트 바이너리 값의 경우 32비트 int 데이터 유형이 아닌 64비트 bigint를 사용해야 합니다.

언제든지 사용할 수 있습니다.DECIMAL. 큰 소수점 -DECIMAL(38, 0)한두 달이면 충분할 거야

CREATE TABLE IdentityTest
(
    Id DECIMAL(38, 0) IDENTITY,
    Name NVARCHAR(200)
)

INSERT INTO IdentityTest VALUES('John'),('Peter'),('Tom')

SELECT * FROM IdentityTest

DROP TABLE IdentityTest

그 결과, 다음과 같은 결과가 됩니다.

아이디 이름.
1 존.
2 피터야.
3 톰.

언급URL : https://stackoverflow.com/questions/4451967/why-doesnt-sql-server-support-unsigned-datatype

반응형