MySQL에서 BIGINT와 INT의 차이는 무엇일까?
MySQL에서 BIGINT와 INT의 가장 근본적인 차이는 데이터 크기에 있습니다. INT는 32비트 정수형이고, BIGINT는 64비트 정수형입니다. 이 차이로 인해 저장 용량과 표현할 수 있는 값의 범위가 크게 달라집니다.
BIGINT와 INT의 주요 차이점
저장 공간: BIGINT는 8바이트를 사용하고, INT는 4바이트를 사용합니다.
최대값 범위: UNSIGNED 기준으로 INT(10)는 최대 4,294,967,295까지 표현할 수 있으며, BIGINT(20)는 최대 18,446,744,073,709,551,615까지 표현할 수 있습니다.
표시 폭(Display Width): BIGINT(20)와 INT(10)에서 괄호 안의 숫자인 20과 10은 실제 저장 크기가 아니라 ZEROFILL 옵션과 함께 사용될 때 값 앞을 0으로 채우는 표시 폭을 의미합니다.
ZEROFILL을 활용한 BIGINT와 INT 데모
실제 예제를 통해 BIGINT와 INT에 ZEROFILL을 적용했을 때 어떻게 출력되는지 확인해 보겠습니다.
1. 테이블 생성
먼저 BIGINT와 INT 컬럼에 각각 ZEROFILL을 적용한 테이블을 생성하는 쿼리입니다.
mysql> create table BigintandintDemo -> ( -> Number1 bigint zerofill, -> Number2 int zerofill -> ); Query OK, 0 rows affected (0.62 sec)
2. 레코드 삽입
이제 테이블에 데이터를 삽입해 보겠습니다. BIGINT 컬럼에는 12자리 숫자를, INT 컬럼에는 6자리 숫자를 입력합니다.
mysql> insert into BigintandintDemo values(234556667777,678999); Query OK, 1 row affected (0.17 sec)
3. 결과 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from BigintandintDemo;
실행 결과는 다음과 같습니다.
+----------------------+------------+ | Number1 | Number2 | +----------------------+------------+ | 00000000234556667777 | 0000678999 | +----------------------+------------+ 1 row in set (0.00 sec)
결과 분석
출력 결과를 보면 흥미로운 점을 발견할 수 있습니다. BIGINT(20) 컬럼에 저장된 12자리 값 234556667777은 앞에 0이 채워져 총 20자리로 표시되었고, INT(10) 컬럼의 6자리 값 678999 역시 앞에 0이 채워져 총 10자리로 표시되었습니다.
즉, ZEROFILL 옵션은 지정된 표시 폭보다 자릿수가 작은 값일 경우 나머지 자리를 0으로 채워서 일정한 폭으로 출력해 주는 기능입니다. 만약 입력된 값이 표시 폭보다 크다면 값은 그대로 전체가 출력되며 잘리지 않습니다.
참고로 MySQL 8.0부터는 표시 폭과 ZEROFILL이 더 이상 권장되지 않으며(deprecated), 향후 버전에서 제거될 수 있으므로 새 프로젝트에서는 사용을 피하는 것이 좋습니다.