-
데이터베이스별 boolean 데이터 타입(PostgreSQL, MySQL, Oracle)DB 2021. 10. 15. 23:06
boolean 타입의 데이터를 저장할 때 항상 0과 1, 'Y'와 'N' 등의 값으로 대체해서 저장하곤 했다.
나는 주로 PostgreSQL을 사용하는데, 문득 boolean 데이터 타입은 진짜 없을까? 하고 찾아보게 되었다.
PostgreSQL
결론은 PostgreSQL은 boolean 데이터 타입을 지원한다.
스펙은 아래와 같다.
데이터 타입 이름 boolean 데이터 타입 사이즈 1 byte true로 인식되는 값 't', 'true', 'y', 'yes', 'on', '1' false로 인식되는 값 'f', 'false', 'n', 'no', 'off', '0' 공백은 무시되며, 대소문자도 무시된다.
공식 문서 상으로는 TRUE와 FALSE라는 예약어 사용을 권장하고 있다.
select 문으로 boolean 타입의 값이 출력될 때는 't' 또는 'f'로 출력된다.
CREATE TABLE test1 (a boolean, b text); INSERT INTO test1 VALUES (TRUE, 'sic est'); INSERT INTO test1 VALUES (FALSE, 'non est'); SELECT * FROM test1; a | b ---+--------- t | sic est f | non est SELECT * FROM test1 WHERE a; a | b ---+--------- t | sic est
출처:
https://www.postgresql.org/docs/9.1/datatype-boolean.html
추가로 다른 데이터베이스에도 boolean 타입이 있는지 알아보았다.
MySQL
MySQL의 경우 빌트인으로 boolean 타입을 지원하고 있지 않다.
대신에 TYNYINT(1) 타입을 사용할 수 있다.
0은 false, 1은 true를 의미한다.
SELECT true, false, TRUE, FALSE, True, False; -- 1 0 1 0 1 0
데이터베이스 상에서 데이터 타입 이름으로 BOOLEAN이나 BOOL을 사용하면,
TYNYINT(1)과 동일한 것으로 인식하는 기능을 제공한다.
CREATE TABLE tasks ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, completed BOOLEAN );
DESCRIBE tasks;
Field Type Null Key Default Extra id INT(11) NO PRI NULL auto_increment title VARCHAR(255) NO NULL completed TYNYINT(1) YES NULL TYNYINT(1) 타입의 컬럼을 조회하면,
당연히 0과 1로 출력이 된다.
출처:
https://www.mysqltutorial.org/mysql-boolean/
Oracle
오라클의 경우 boolean 데이터 타입이 제공되지 않는다.
따라서 NUMBER(1) 타입(0 또는 1)이나, VARCHAR(1) 타입('Y' 또는 'N')으로 대체해서 사용해야 한다.
출처:
https://stackoverflow.com/questions/3726758/is-there-any-boolean-type-in-oracle-databases
'DB' 카테고리의 다른 글
다중 태그 검색 SQL문 (0) 2021.10.31 Ubuntu에서 PostgreSQL 설치 및 데이터 저장 위치 변경하기 (0) 2021.10.26 PostgreSQL timestamp vs timestamptz (0) 2021.10.14 [SQL] UPDATE 시 LIKE 조건에 컬럼 이름 사용하기 (0) 2021.07.12 [SQL] UPDATE 시 ROW_NUMBER() 함수 사용하기 (0) 2021.07.03