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

MySQL에서 BOOLEAN과 TINYINT(1)의 차이점 완벽 정리

MySQL BOOLEAN과 TINYINT(1), 실제 차이는 없을까?

MySQL에서 BOOLEANTINYINT(1)의 근본적인 차이는 사실 명명 방식(naming convention)에 있습니다. 참(true) 또는 거짓(false) 값을 다룰 때는 TINYINT(1)보다 BOOLEAN이라는 데이터 타입이 자연스럽게 떠오르기 때문입니다.

흥미로운 점은 이 두 데이터 타입이 MySQL 내부적으로 동의어(synonym) 관계라는 것입니다. 즉, 어떤 타입을 사용할지는 전적으로 개발자의 선택에 달려 있으며, 값 역시 1과 0 또는 true와 false 중 편한 표현을 사용할 수 있습니다.

예제 1: BOOLEAN 데이터 타입으로 테이블 생성

먼저 BOOLEAN 데이터 타입을 사용해 테이블을 만들어 보겠습니다.

mysql> create table BooleanDemo
-> (
-> Light Boolean
-> );
Query OK, 0 rows affected (0.52 sec)

테이블에 true 값을 가진 레코드를 삽입합니다.

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

저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from BooleanDemo;

실행 결과, true 값이 숫자 1로 저장되어 출력되는 것을 확인할 수 있습니다.

+-------+
| Light |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)

예제 2: TINYINT(1) 데이터 타입으로 테이블 생성

이번에는 동일한 구조로 TINYINT(1) 데이터 타입을 사용해 테이블을 생성합니다.

mysql> create table tinyint1Demo
-> (
-> Light tinyint(1)
-> );
Query OK, 0 rows affected (0.58 sec)

테이블에 숫자 1을 삽입합니다.

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

마찬가지로 전체 레코드를 조회합니다.

mysql> select *from tinyint1Demo;

결과는 BOOLEAN 예제와 완전히 동일하게 출력됩니다.

+-------+
| Light |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)

정리: 언제 어떤 타입을 사용해야 할까?

핵심 요약: 두 데이터 타입의 유일한 차이는 의미론적(semantics) 측면에 있습니다. 코드의 가독성과 의도 전달 관점에서 다음과 같이 구분하는 것이 좋습니다.

  • true / false처럼 논리적인 상태를 표현할 때 → BOOLEAN 사용이 적합합니다.
  • 0 / 1처럼 수치적인 값으로 다룰 때 → TINYINT(1) 사용이 적합합니다.

즉, 저장 방식과 결과물은 완전히 같지만, 스키마를 읽는 사람에게 컬럼의 용도를 명확히 알려주는 것이 바로 이 선택의 포인트입니다.