본문 바로가기

개발 이모저모

bigint(20) unsigned, bigint(20) 차이가 뭘까?

728x90
반응형

테이블 설계할 때 auto increment하는 id값을 설정하게 되었다.

이때 데이터 형식을 bigint(20) unsigned로 할 수도 있고, bigint(20) 할 수도 있다.

데이터베이스에서 숫자 데이터 타입을 지정하는 방식인데 이 둘이 각각 의미하는 바가 조금 다르다.


 

bigint(20) unsigned
unsigned 옵션이 있는 경우, 이 필드는 음수를 지정할 수 없다.
대신 양수만 저장할 수 있게 되어 값의 범위가 두 배로 늘어난다.
( 범위: 0부터 18,446,744,073,709,551,615 (2^64 - 1)까지 )
양수의 최대값이 두배로 증가하기 때문에 , 데이터베이스의 레코드 수가 매우 클것 같으면 auto increment 필드로 사용할 때 unsigned 사용을 추천한다. 

bigint(20)
기본적으로 signed 타입으로, 양수와 음수 모두 저장이 가능하다.
음수와 양수를 모두 포함할 수 있어 양수의 범위가 절반으로 줄어든다.
(범위: -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지)

 

 

추가로, 숫자 뒤의 (20)은 디스플레이 길이를 의미하며, 실제 저장 범위에는 영향을 미치지 않는다.
MySQL에서 (20)은 저장할 수 있는 숫자의 길이와 관련이 없다.
디스플레이 길이는 패딩(padding)을 통해 출력 형식을 결정할 때 사용될 수 있지만, 실제로 데이터의 크기나 범위에는 아무 영향도 주지 않는다. bigint(20)이더라도 123을 저장하면, 이 값은 그대로 123으로 저장되는 것이다.


그리고 (20)은 zerofill을 사용할 때만 유의미하다. zerofill과 함께 사용하면, 숫자가 20자리로 보이도록 왼쪽에 0을 채운다.
MySQL 8.0버전 이후로는 zerofill 속성이 더 이상 권장되지 않는다고한다.

CREATE TABLE example (
  id BIGINT(20) ZEROFILL
);
INSERT INTO example (id) VALUES (123);
SELECT id FROM example;
//결과
00000000000000000123
728x90
반응형