MySQL에서는 boolean형은 BOOL혹은 BOOLEAN으로 정의 하면 됩니다.
실제로 boolean형이라고 하면 1비트면 충분하지만 MySQL에서는 BOOLEAN형으로 하면, TINYINT(1)과 같이 1바이트를 잡아 먹습니다.
그리고 데이터 형도 TRUE와 FLASE는 1과 0에 매칭이 됩니다.
그래서 쿼리를 해 보면 아래와 같은 결과가 나옵니다.
01.
mysql>
SELECT
IF(0 =
FALSE
,
'true'
,
'false'
);
02.
+
--------------------------------+
03.
| IF(0 =
FALSE
,
'true'
,
'false'
) |
04.
+
--------------------------------+
05.
|
true
|
06.
+
--------------------------------+
07.
08.
mysql>
SELECT
IF(1 =
TRUE
,
'true'
,
'false'
);
09.
+
-------------------------------+
10.
| IF(1 =
TRUE
,
'true'
,
'false'
) |
11.
+
-------------------------------+
12.
|
true
|
13.
+
-------------------------------+
14.
15.
mysql>
SELECT
IF(2 =
TRUE
,
'true'
,
'false'
);
16.
+
-------------------------------+
17.
| IF(2 =
TRUE
,
'true'
,
'false'
) |
18.
+
-------------------------------+
19.
|
false
|
20.
+
-------------------------------+
21.
22.
mysql>
SELECT
IF(2 =
FALSE
,
'true'
,
'false'
);
23.
+
--------------------------------+
24.
| IF(2 =
FALSE
,
'true'
,
'false'
) |
25.
+
--------------------------------+
26.
|
false
|
27.
+
--------------------------------+
일반 프로그래머 분들이라면, 0이 아닌 숫자는 true로 인식 할 수 있지만, MySQL에서는 false로 떨어지게 됩니다.
그래서 BOOLEAN형을 쓰는것 보다는 TINYINT(1)을 써서 좀 더 명확하게 하는게 좋지 않은가 싶습니다.
아니면 더 좋은 형이 있을까요?
참고 : http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html