답변:
서로 다른 공간을 차지하고 허용 가능한 값의 범위가 다릅니다.
다음은 SQL Server에 대한 값의 크기와 범위이며 다른 RDBMS도 비슷한 문서를 가지고 있습니다.
모두 동일한 사양을 사용하지만 (아래에 언급 된 몇 가지 사소한 예외는 제외) 이러한 유형의 다양한 조합을 지원합니다 (오라클은 NUMBER
데이터 유형 만 있으므로 포함되지 않음 , 위 링크 참조).
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
또한 동일한 값 범위를 지원하며 (아래 예외는 하나만 제외) 모두 동일한 스토리지 요구 사항이 있습니다.
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
"서명되지 않은"유형은 MySQL에서만 사용할 수 있으며 나머지는 서명 된 범위를 사용합니다. 단 한 가지 예외가 있습니다. tinyint
SQL Server에서는 서명되지 않았 으며 값 범위는 0 ~ 255입니다.
필요한 저장 공간의 크기와 숫자의 크기
SQL Server에서
tinyint 1 바이트, 0 ~ 255
smallint 2 바이트, -2 ^ 15 (-32,768) ~ 2 ^ 15-1 (32,767)
int 4 바이트, -2 ^ 31 (-2,147,483,648) ~ 2 ^ 31-1 (2,147,483,647)
bigint 8 바이트, -2 ^ 63 (-9,223,372,036,854,775,808) ~ 2 ^ 63-1 (9,223,372,036,854,775,807)
숫자 4를 모두 4에 저장할 수 있지만 bigint는 8 바이트를 사용하고 tinyint는 1 바이트를 사용합니다
이러한 데이터 유형의 실제 사용에 도달하면 특정 정수 유형을 사용하는 것이 과잉이거나 사용되지 않을 수 있음을 이해하는 것이 매우 중요합니다. 예를 들어, 테이블에서 employeeCount에 정수 데이터 유형을 사용하면 employee가 ~-20 억에서 20 억 사이의 정수 값 또는 0-약 40 억 (서명되지 않은) 범위의 정수 값을 지원하기 때문에 과잉이 될 수 있다고합니다. 따라서 직원 수 약 220 만 명의 직원을 가진 Walmart와 같은 미국 최대의 고용주 중 하나가 employeeCount 열에 정수 데이터 유형을 사용한다고 생각하더라도 불필요합니다. 이러한 경우 예를 들어 mediumint (0-1,600 만 (부호없는)를 지원하는)를 사용합니다. 범위가 비정상적으로 클 것으로 예상되면 Daniel에서 볼 수 있듯이 bigint를 고려할 수 있습니다.
차이점은 각 정수에 할당 된 메모리 양과 이들이 저장할 수있는 숫자의 양입니다.
데이터 유형 범위 스토리지
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte
예
다음 예제는 bigint, int, smallint 및 tinyint 데이터 형식을 사용하여 테이블을 만듭니다. 각 열에 값이 삽입되고 SELECT 문에 반환됩니다.
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;