MySQL에서 BOOL 타입을 INT로 변환하려면 CAST() 함수를 사용할 수 있습니다. 참고로 MySQL에서 BOOLEAN은 내부적으로 TINYINT(1)로 저장되기 때문에 true는 1, false는 0으로 처리됩니다. 이 글에서는 예제 테이블을 만들고 CAST() 함수를 활용해 BOOL 값을 명시적으로 정수형으로 변환하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 BOOL 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table convertBoolToIntDemo
-> (
-> isYoung bool
-> );
Query OK, 0 rows affected (0.69 sec)
2. 레코드 삽입하기
INSERT 명령어를 사용해 테이블에 true와 false 값을 번갈아 삽입해 보겠습니다.
mysql> insert into convertBoolToIntDemo values(true);
Query OK, 1 row affected (0.18 sec)
mysql> insert into convertBoolToIntDemo values(false);
Query OK, 1 row affected (0.09 sec)
mysql> insert into convertBoolToIntDemo values(true);
Query OK, 1 row affected (0.15 sec)
mysql> insert into convertBoolToIntDemo values(false);
Query OK, 1 row affected (0.18 sec)
3. 저장된 데이터 확인하기
SELECT 명령어로 테이블에 저장된 레코드를 조회합니다.
mysql> select *from convertBoolToIntDemo;
실행 결과는 다음과 같습니다.
+---------+
| isYoung |
+---------+
| 1 |
| 0 |
| 1 |
| 0 |
+---------+
4 rows in set (0.00 sec)
출력 결과에서 확인할 수 있듯이, true는 1로, false는 0으로 저장되어 있습니다.
4. CAST() 함수로 BOOL을 INT로 변환하기
다음은 CAST() 함수를 사용해 BOOL을 INT로 변환하는 쿼리입니다.
mysql> select cast(isYoung=1 AS SIGNED INTEGER) from convertBoolToIntDemo;
위 쿼리의 실행 결과는 다음과 같습니다.
+-----------------------------------+
| cast(isYoung=1 AS SIGNED INTEGER) |
+-----------------------------------+
| 1 |
| 0 |
| 1 |
| 0 |
+-----------------------------------+
4 rows in set (0.00 sec)
쿼리 동작 원리
isYoung = 1 비교 표현식은 해당 값이 1(true)이면 1을, 그렇지 않으면 0을 반환하는 불리언 표현식입니다. 이 결과를 CAST(... AS SIGNED INTEGER)로 감싸면 부호 있는 정수형(SIGNED INTEGER)으로 명시적으로 변환됩니다.
참고로 CAST() 외에도 CONVERT() 함수를 사용하거나 isYoung + 0처럼 간단한 산술 연산을 적용하는 방법으로도 동일한 결과를 얻을 수 있습니다.