MySQL에서 tinyint, smallint, mediumint, bigint 및 int의 차이점은 무엇입니까?
어떤 경우에 사용해야합니까?
답변
서로 다른 공간을 차지하고 허용 가능한 값의 범위가 다릅니다.
다음은 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 바이트를 사용합니다
답변
그것들은 MySQL 데이터 형식 인 것 같습니다.
그들은 문서 에 따르면 :
- tinyint = 1 바이트
- smallint = 2 바이트
- mediumint = 3 바이트
- int = 4 바이트
- bigint = 8 바이트
그리고 당연히 점점 더 많은 수의 숫자를 받아들입니다.
답변
이러한 데이터 유형의 실제 사용에 도달하면 특정 정수 유형을 사용하는 것이 과잉이거나 사용되지 않을 수 있음을 이해하는 것이 매우 중요합니다. 예를 들어, 테이블에서 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;