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

MySQL에서 BIT와 TINYINT의 차이점 완벽 정리

MySQL에는 다양한 숫자 데이터 타입이 존재하며, 그중 BITTINYINT는 저장 용량과 표현 가능한 값의 범위가 서로 다릅니다. 이 글에서는 두 데이터 타입의 차이점을 예제와 함께 자세히 살펴보겠습니다.

BIT와 TINYINT의 기본 개념

BIT는 1비트 크기의 값을 저장할 수 있는 데이터 타입입니다. 즉, 저장할 수 있는 값은 0 또는 1뿐입니다. 예를 들어 BIT 타입 컬럼에 2를 삽입하려고 하면 MySQL은 오류를 발생시킵니다.

반면 TINYINT는 8비트(1바이트) 크기의 값을 저장할 수 있는 데이터 타입입니다. 부호가 있는(signed) 경우 저장할 수 있는 최대값은 127입니다. 따라서 987처럼 127을 초과하는 값은 저장할 수 없으며, 삽입을 시도하면 MySQL은 범위 초과 오류를 발생시킵니다.

테스트 환경 확인

이번 예제는 MySQL 8.0.12 버전에서 진행합니다. 먼저 설치된 MySQL 버전을 확인해 보겠습니다.

mysql> select version();

실행 결과는 다음과 같습니다.

+-----------+
| version() |
+-----------+
| 8.0.12    |
+-----------+
1 row in set (0.00 sec)

BIT 타입 사용 예제

BIT 타입 테이블 생성

BIT 타입 컬럼을 가진 테이블을 생성합니다.

mysql> create table BitDemo
   -> (
   -> Id BIT
   -> );
Query OK, 0 rows affected (0.56 sec)

정상적인 값 삽입

'BitDemo' 테이블에 1과 0을 차례로 삽입합니다.

mysql> insert into BitDemo values(1);
Query OK, 1 row affected (0.13 sec)

mysql> insert into BitDemo values(0);
Query OK, 1 row affected (0.33 sec)

허용 범위 초과 시 오류 발생

BIT 타입에 2를 삽입하려고 하면 오류가 발생합니다.

mysql> insert into BitDemo values(2);
ERROR 1406 (22001): Data too long for column 'Id' at row 1

BIT는 1비트만 저장할 수 있으므로 2라는 값은 표현할 수 없어 위와 같은 오류가 출력됩니다.

TINYINT 타입 사용 예제

TINYINT 타입 테이블 생성

TINYINT 타입 컬럼을 가진 테이블을 생성합니다.

mysql> create table TinyIntDemo
   -> (
   -> Id TINYINT
   -> );
Query OK, 0 rows affected (0.69 sec)

정상적인 값 삽입

TINYINT는 -128부터 127까지의 값을 저장할 수 있습니다. 123, 97, 127을 삽입해 보겠습니다.

mysql> insert into TinyIntDemo values(123);
Query OK, 1 row affected (0.17 sec)

mysql> insert into TinyIntDemo values(97);
Query OK, 1 row affected (0.15 sec)

mysql> insert into TinyIntDemo values(127);
Query OK, 1 row affected (0.16 sec)

허용 범위 초과 시 오류 발생

127을 초과하는 값을 삽입하려고 하면 모두 오류가 발생합니다.

mysql> insert into TinyIntDemo values(9876);
ERROR 1264 (22003): Out of range value for column 'Id' at row 1
mysql> insert into TinyIntDemo values(987);
ERROR 1264 (22003): Out of range value for column 'Id' at row 1
mysql> insert into TinyIntDemo values(255);
ERROR 1264 (22003): Out of range value for column 'Id' at row 1
mysql> insert into TinyIntDemo values(254);
ERROR 1264 (22003): Out of range value for column 'Id' at row 1
mysql> insert into TinyIntDemo values(200);
ERROR 1264 (22003): Out of range value for column 'Id' at row 1
mysql> insert into TinyIntDemo values(199);
ERROR 1264 (22003): Out of range value for column 'Id' at row 1

부호 있는 TINYINT의 최대 저장값은 127이므로, 그 이상의 어떤 값도 저장할 수 없습니다.

저장된 데이터 확인

SELECT 명령으로 정상적으로 삽입된 레코드를 조회해 보겠습니다.

mysql> select *from TinyIntDemo;

실행 결과는 다음과 같습니다.

+------+
| Id   |
+------+
|  123 |
|   97 |
|  127 |
+------+
3 rows in set (0.00 sec)

정리: BIT vs TINYINT 비교

두 데이터 타입의 핵심 차이를 요약하면 다음과 같습니다.

  • BIT: 1비트만 저장 가능하며, 값은 0 또는 1로 제한됩니다. 참/거짓 같은 불리언 성격의 데이터나 플래그 저장에 적합합니다.
  • TINYINT: 8비트(1바이트)를 사용하며, 부호 있는 경우 -128~127, 부호 없는 UNSIGNED 옵션 사용 시 0~255까지 저장할 수 있습니다.

따라서 단순히 참/거짓 여부만 저장한다면 BIT가 메모리를 절약할 수 있고, 작은 범위의 정수를 다루어야 한다면 TINYINT가 적합합니다. 참고로 MySQL에서는 TINYINT(1)를 불리언(Boolean)의 별칭처럼 사용하기도 하므로, 상황에 맞게 선택하는 것이 중요합니다.