MySQL에서 tinyint, smallint, mediumint, bigint 및 int의 차이점은 무엇입니까?


368

MySQL에서 tinyint, smallint, mediumint, bigint 및 int의 차이점은 무엇입니까?

어떤 경우에 사용해야합니까?

답변:


574

서로 다른 공간을 차지하고 허용 가능한 값의 범위가 다릅니다.

다음은 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에서만 사용할 수 있으며 나머지는 서명 된 범위를 사용합니다. 단 한 가지 예외가 있습니다. tinyintSQL Server에서는 서명되지 않았 으며 값 범위는 0 ~ 255입니다.


21
서명되지 않은 유형은 MySQL에서만 사용할 수 있다는 것을 몰랐습니다. 이것은 다른 RDBMS보다 MySQL의 큰 이점입니다. 이 답변이 게시 된 날 이후로 변경된 것이 있습니까?
biox

3
@Daniel, 그들은 무엇을 생각하고 있습니까, 왜 3 바이트에는 1 개가 있고 6 바이트에는 아무것도 없습니까?
Pacerier

9
@Pacerier 아마 그들은 그것을 이름을 지정하는 방법을 알고하지 않았다 :))
미하이 Matei

5
그들은 그것을 bigint 라고 불렀 으며 , bigint 대신 humongousint 라고 불렀습니다 .
MarioDS

5
greatint는 Oracle USA 회사 인 옵션이 될 수 있습니다. :)
osiris

32

필요한 저장 공간의 크기와 숫자의 크기

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 바이트를 사용합니다


15

그것들은 MySQL 데이터 형식 인 것 같습니다.

그들은 문서 에 따르면 :

  1. tinyint = 1 바이트
  2. smallint = 2 바이트
  3. mediumint = 3 바이트
  4. int = 4 바이트
  5. bigint = 8 바이트

그리고 당연히 점점 더 많은 수의 숫자를 받아들입니다.


9

이러한 데이터 유형의 실제 사용에 도달하면 특정 정수 유형을 사용하는 것이 과잉이거나 사용되지 않을 수 있음을 이해하는 것이 매우 중요합니다. 예를 들어, 테이블에서 employeeCount에 정수 데이터 유형을 사용하면 employee가 ~-20 억에서 20 억 사이의 정수 값 또는 0-약 40 억 (서명되지 않은) 범위의 정수 값을 지원하기 때문에 과잉이 될 수 있다고합니다. 따라서 직원 수 약 220 만 명의 직원을 가진 Walmart와 같은 미국 최대의 고용주 중 하나가 employeeCount 열에 정수 데이터 유형을 사용한다고 생각하더라도 불필요합니다. 이러한 경우 예를 들어 mediumint (0-1,600 만 (부호없는)를 지원하는)를 사용합니다. 범위가 비정상적으로 클 것으로 예상되면 Daniel에서 볼 수 있듯이 bigint를 고려할 수 있습니다.


2
직원 수가 220 만 명인 WalMart의 예에서, 직원이 매년 약 50 %의 이직률을 유지하면 EmployeeID의 INT 유형이 최소 필요하다고 생각합니다. 당신은 어떻게 생각하세요? 물론 대부분의 일반 회사의 경우 INT 유형은 WAY overkill입니다!
kiltannen

3

차이점은 각 정수에 할당 된 메모리 양과 이들이 저장할 수있는 숫자의 양입니다.


2

데이터 유형 범위 스토리지

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.