MySQL BIGINT vs BIGINT(20): 핵심 차이점
MySQL에서 BIGINT와 BIGINT(20)의 유일한 차이점은 표시 너비(display width)입니다. 괄호 안의 숫자 20은 실제 저장 가능한 값의 크기나 범위에 영향을 주지 않으며, 오직 값을 화면에 표시할 때의 최소 자릿수를 지정하는 용도로만 사용됩니다.
즉, 두 타입 모두 동일하게 -9223372036854775808부터 9223372036854775807까지의 정수를 저장할 수 있습니다. 참고로 MySQL 8.0.17 버전부터는 표시 너비 기능이 공식적으로 지원 중단(deprecated)되었으므로, 새 프로젝트에서는 단순히 BIGINT만 사용하는 것이 권장됩니다.
예제: BIGINT(20) ZEROFILL 테이블 생성
실제 예제를 통해 확인해 보겠습니다. 아래에서는 표시 너비가 20인 BIGINT(20)에 ZEROFILL 옵션을 함께 설정하여 테이블을 생성합니다.
mysql> create table DemoTable
(
Number bigint(20) zerofill
);
Query OK, 0 rows affected (0.58 sec)ZEROFILL 옵션을 사용하면 지정된 표시 너비만큼 앞자리가 0으로 채워져 출력되므로, 표시 너비의 역할을 명확하게 확인할 수 있습니다.
레코드 삽입하기
이제 insert 명령을 사용하여 테이블에 여러 개의 레코드를 삽입해 보겠습니다.
mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable values(12); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(123); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(1234); Query OK, 1 row affected (0.11 sec)
조회 결과 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
표시 너비가 20으로 설정되어 있으므로, 저장된 값의 자릿수가 20자리에 미치지 못하면 아래와 같이 앞부분이 0으로 채워져 출력됩니다.
+----------------------+ | Number | +----------------------+ | 00000000000000000001 | | 00000000000000000012 | | 00000000000000000123 | | 00000000000000001234 | +----------------------+ 4 rows in set (0.00 sec)
정리
- BIGINT와 BIGINT(20)의 저장 범위와 성능은 완전히 동일합니다.
- 괄호 안의 숫자(20)는 표시 너비를 의미하며,
ZEROFILL과 함께 사용하면 해당 자릿수만큼 0으로 채워 출력됩니다. - MySQL 8.0.17 이상에서는 표시 너비가 deprecated 되었으므로, 특별한 이유가 없다면
BIGINT만 선언하는 것이 좋습니다.