MySQL에서 int(5)와 int(10)의 차이
MySQL에서 int(5)나 int(10)처럼 괄호 안에 들어가는 숫자는 저장 용량이 아니라 표시 너비(display width)를 의미합니다. 즉, 실제로 저장되는 정수의 범위나 바이트 수에는 전혀 영향을 주지 않으며, 값이 화면에 출력될 때의 자릿수만 결정합니다.
예를 들어 int(5)는 표시 너비가 5자리, int(10)은 10자리입니다. 이때 ZEROFILL 옵션과 함께 사용하면, 지정된 너비보다 자릿수가 적은 숫자의 앞부분이 0으로 채워져 출력됩니다.
예제 테이블 생성하기
먼저 표시 너비가 다른 두 개의 컬럼을 가진 테이블을 만들어 보겠습니다. 여기서는 각각 int(11)과 int(13)으로 설정했습니다.
mysql> create table intVsIntAnyThingDemo
-> (
-> Number1 int(11) unsigned zerofill,
-> Number int(13) unsigned zerofill
-> );
Query OK, 0 rows affected (1.17 sec)
데이터 삽입하기
이제 INSERT 명령어를 사용해 여러 개의 레코드를 삽입합니다.
mysql> insert into intVsIntAnyThingDemo values(12345,6789);
Query OK, 1 row affected (0.44 sec)
mysql> insert into intVsIntAnyThingDemo values(3,2);
Query OK, 1 row affected (0.20 sec)
mysql> insert into intVsIntAnyThingDemo values(12,89);
Query OK, 1 row affected (0.15 sec)
mysql> insert into intVsIntAnyThingDemo values(123,6789);
Query OK, 1 row affected (0.17 sec)
mysql> insert into intVsIntAnyThingDemo values(1234,6789);
Query OK, 1 row affected (0.14 sec)
조회 결과 확인하기
SELECT 문으로 전체 레코드를 조회합니다.
mysql> select *from intVsIntAnyThingDemo;
아래 결과를 보면, 설정한 표시 너비만큼 숫자 앞이 0으로 채워지는 것(ZEROFILL)을 확인할 수 있습니다.
+-------------+---------------+
| Number1 | Number |
+-------------+---------------+
| 00000012345 | 0000000006789 |
| 00000000003 | 0000000000002 |
| 00000000012 | 0000000000089 |
| 00000000123 | 0000000006789 |
| 00000001234 | 0000000006789 |
+-------------+---------------+
5 rows in set (0.00 sec)
정리 및 참고 사항
Number1 컬럼은 너비가 11이므로 최대 11자리까지, Number 컬럼은 너비가 13이므로 최대 13자리까지 0으로 채워져 출력됩니다. 만약 ZEROFILL 옵션이 없다면, 괄호 안의 숫자는 결과에 아무런 영향을 주지 않습니다.
참고로 MySQL 8.0.17 버전부터는 정수 타입의 표시 너비가 공식적으로 더 이상 사용되지 않음(deprecated) 처리되었습니다. 따라서 새 프로젝트에서는 INT만 단독으로 사용하는 것이 권장됩니다.