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

MySQL 값 저장, BOOLEAN vs TINYINT(1): 무엇을 선택해야 할까?

MySQL에서 BOOLEAN과 TINYINT의 관계

MySQL에서 BOOLEANBOOL 데이터 타입은 모두 TINYINT(1)와 완전히 동일합니다. BOOLEAN이나 BOOL로 컬럼을 생성하면 MySQL이 내부적으로 이를 자동으로 TINYINT(1)로 변환하는데, 그 이유는 BOOLEAN과 BOOL이 사실상 TINYINT(1)의 동의어(synonym)에 불과하기 때문입니다.

또한 MySQL에서 TRUE1, FALSE0의 상수 리터럴로 처리되므로, 실질적인 참/거짓 판단은 0이 아닌 모든 값을 '참'으로 간주하는 방식으로 이루어집니다.

BOOLEAN 데이터 타입으로 테이블 생성하기

먼저 BOOLEAN 데이터 타입을 사용하는 테이블을 생성해 보겠습니다.

mysql> create table BooleanDemo
    -> (
    -> IsOn BOOLEAN
    -> );
Query OK, 0 rows affected (0.58 sec)

테이블이 생성되었다면, 다음 쿼리로 실제 내부 구조를 확인할 수 있습니다.

mysql> show create table BooleanDemo;

출력 결과

CREATE TABLE `booleandemo` (
  `IsOn` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

출력 결과에서 알 수 있듯이, BOOLEAN으로 선언한 컬럼이 실제로는 tinyint(1)로 정의되어 있는 것을 확인할 수 있습니다.

BOOL 데이터 타입도 결과는 같다

BOOL 데이터 타입 역시 마찬가지입니다. 동일한 방식으로 테이블을 생성해 보겠습니다.

mysql> create table BOOLDemo
    -> (
    -> validUser BOOL
    -> );
Query OK, 0 rows affected (0.61 sec)

생성된 테이블의 내부 구조를 확인합니다.

mysql> show create table BOOLDemo;

출력 결과

CREATE TABLE `booldemo` (
  `validUser` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

이번에도 BOOL로 선언된 컬럼이 tinyint(1)로 변환된 것을 볼 수 있습니다.

그렇다면 무엇을 사용해야 할까?

세 가지 표기법 모두 저장 구조와 성능 면에서 완전히 동일하므로 기능적인 차이는 없습니다. 다만 코드 가독성과 의도 전달 측면에서 다음과 같이 선택하는 것이 좋습니다.

  • 참/거짓 의미가 명확한 컬럼: BOOLEAN 또는 BOOL을 사용하면 개발자의 의도가 명확히 드러납니다.
  • 값의 범위가 중요한 경우: TINYINT(1)를 직접 명시하면 실제 저장되는 숫자형 특성을 강조할 수 있습니다.

결론적으로 MySQL에서 BOOLEAN, BOOL, TINYINT(1)는 같은 것이므로, 팀의 코딩 컨벤션에 맞춰 일관성 있게 사용하는 것이 가장 바람직합니다.