Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL TINYINT(1)과 TINYINT(2)의 차이점은 무엇일까?

TINYINT(1)과 TINYINT(2), 괄호 안 숫자의 의미는?

MySQL에서 TINYINT 뒤에 붙는 숫자 1과 2는 표시 폭(display width)을 나타냅니다. 즉, TINYINT(1)과 TINYINT(2)는 저장할 수 있는 값의 범위나 내부 동작 방식에는 전혀 차이가 없으며, 오직 화면에 표시되는 자릿수만 다릅니다.

두 타입의 차이를 가장 명확하게 확인하는 방법은 ZEROFILL 옵션을 함께 사용하는 것입니다. ZEROFILL은 지정된 표시 폭보다 자릿수가 작은 숫자 앞을 0으로 채워 출력해 주는 옵션입니다.

  • tinyint(1) zerofill
  • tinyint(2) zerofill

테이블 생성으로 차이 확인하기

먼저 TINYINT(1)과 TINYINT(2) 컬럼에 각각 ZEROFILL 옵션을 적용한 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table tinyIntDemo
    -> (
    -> Number1 tinyint(1) zerofill,
    -> Number2 tinyint(2) zerofill
    -> );
Query OK, 0 rows affected (0.62 sec)

다음으로 INSERT 문을 사용해 두 컬럼 모두에 값 1을 입력합니다.

mysql> insert into tinyIntDemo values(1,1);
Query OK, 1 row affected (0.12 sec)

SELECT 문으로 저장된 데이터를 조회합니다.

mysql> select *from tinyIntDemo;

실행 결과는 다음과 같습니다. 아래 결과에서 두 컬럼의 출력 차이를 눈여겨보세요.

+---------+---------+
| Number1 | Number2 |
+---------+---------+
|       1 |      01 |
+---------+---------+
1 row in set (0.00 sec)

결과 해석

Number1(TINYINT(1))은 표시 폭이 1자리이므로 그대로 1이 출력되고, Number2(TINYINT(2))는 표시 폭이 2자리이므로 앞이 0으로 채워진 01이 출력됩니다. 이처럼 괄호 안의 숫자는 값의 범위(부호 있는 경우 -128~127, UNSIGNED인 경우 0~255)와는 무관하며, ZEROFILL 사용 시 채워질 자릿수를 결정할 뿐입니다.

추가로 알아두면 좋은 점

  • TINYINT(1)과 BOOLEAN: MySQL에서는 관례상 TINYINT(1)을 불리언(Boolean) 값으로 사용하는 경우가 많으며, 일부 클라이언트나 커넥터는 TINYINT(1) 컬럼을 true/false로 변환하여 표시합니다.
  • MySQL 8.0.17 이상 주의사항: 표시 폭(display width) 기능은 더 이상 권장되지 않으며(deprecated), 향후 버전에서 제거될 수 있습니다. 새로운 프로젝트에서는 이 옵션에 의존하지 않는 스키마 설계를 권장합니다.