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

PHP와 MySQL에서 불리언(Boolean) 값 다루는 방법 완벽 정리

PHP와 MySQL에서 불리언(Boolean) 값 처리하기

MySQL에서 불리언 값을 다루는 방법을 예제와 함께 자세히 알아보겠습니다. 이 글에서 사용한 MySQL 버전은 8.0.12입니다.

1. MySQL 버전 확인

먼저 현재 사용 중인 MySQL 버전을 확인해 보겠습니다.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.12    |
+-----------+
1 row in set (0.00 sec)

2. MySQL에서 불리언 타입의 실체: TINYINT(1)

MySQL에서 불리언 값을 처리하려면 BOOL, BOOLEAN, 또는 TINYINT(1)를 사용할 수 있습니다. 흥미로운 점은 BOOL이나 BOOLEAN으로 컬럼을 선언하더라도 MySQL이 내부적으로 이를 TINYINT(1)로 변환한다는 것입니다.

BOOL 또는 BOOLEAN 데이터 타입에서 true 리터럴은 1로, false 리터럴은 0으로 표현됩니다. 이는 PHP나 C/C++ 언어의 불리언 처리 방식과 동일합니다.

3. BOOLEAN이 TINYINT(1)로 변환되는지 확인하기

MySQL이 BOOL 또는 BOOLEAN을 TINYINT(1)로 변환한다는 사실을 직접 확인해 보겠습니다. BOOLEAN 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> create table BoolOrBooleanOrTinyintDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> isvalidAddress BOOLEAN,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.74 sec)

이제 SHOW CREATE TABLE 명령으로 위 테이블의 DDL(테이블 정의문)을 확인해 보겠습니다.

mysql> show create table BoolOrBooleanOrTinyintDemo\G

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

*************************** 1. row ***************************
Table: BoolOrBooleanOrTinyintDemo
Create Table: CREATE TABLE `boolorbooleanortinyintdemo` (
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    `isvalidAddress` tinyint(1) DEFAULT NULL,
    PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

출력 결과를 보면 isvalidAddress 컬럼이 원래 BOOLEAN으로 선언했음에도 불구하고, 내부적으로 tinyint(1)로 변환된 것을 확인할 수 있습니다.

4. true와 false 값 저장 및 조회

이제 true 리터럴이 1로, false 리터럴이 0으로 표현되는지 확인해 보겠습니다. 테이블에 true와 false 값을 번갈아 삽입합니다.

mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(true);
Query OK, 1 row affected (0.43 sec)
mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(false);
Query OK, 1 row affected (0.17 sec)
mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(true);
Query OK, 1 row affected (0.29 sec)
mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(false);
Query OK, 1 row affected (0.12 sec)
mysql> insert into BoolOrBooleanOrTinyintDemo(isvalidAddress) values(true);
Query OK, 1 row affected (0.33 sec)

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from BoolOrBooleanOrTinyintDemo;

조회 결과는 다음과 같습니다.

+----+----------------+
| Id | isvalidAddress |
+----+----------------+
|  1 |              1 |
|  2 |              0 |
|  3 |              1 |
|  4 |              0 |
|  5 |              1 |
+----+----------------+
5 rows in set (0.00 sec)

위 결과에서 볼 수 있듯이 true는 1로, false는 0으로 저장됩니다.

5. PHP에서의 불리언 처리

PHP도 마찬가지입니다. true는 1로, false는 0으로 표현됩니다.

다음 PHP 코드를 살펴보겠습니다. 변수 $isValidAddress에 값 1을 설정하면 if 조건식이 참(true)으로 평가되어 if 블록만 실행됩니다.

$isValidAddress = 1;
if($isValidAddress)
{
   echo 'true is represented as ';
   echo ($isValidAddress);
}
else
{
   echo 'false is represented as ';
   echo ($isValidAddress);
}

실행 결과:

true is represented as 1

이번에는 같은 변수에 값 0을 설정해 보겠습니다. 이 경우 if 조건식이 거짓(false)으로 평가되어 else 블록만 실행됩니다.

$isValidAddress=0;
if($isValidAddress)
{
   echo 'true is represented as ';
   echo ($isValidAddress);
}
else
{
   echo 'false is represented as ';
   echo ($isValidAddress);
}

실행 결과:

false is represented as 0

정리

  • MySQL에서 BOOL, BOOLEAN, TINYINT(1)는 모두 동일하게 취급되며, 실제 저장 시 TINYINT(1)로 변환됩니다.
  • true 리터럴은 1, false 리터럴은 0으로 저장됩니다.
  • PHP 역시 true는 1, false는 0으로 평가되므로 MySQL과 PHP 간의 불리언 값 호환이 자연스럽게 이루어집니다.