금요일, 4월 19
Shadow

#003 MySQL에서 BOOLEAN형..

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.