데이터베이스별 BOOLEAN 타입 처리 방식의 차이는 쿼리 호환성 문제의 핵심 원인입니다. MySQL과 SQLite는 실제 BOOLEAN 타입이 없으며, 대신 TINYINT(1) 또는 INTEGER와 같은 정수형으로 BOOLEAN 값을 저장합니다. 이로 인해 이들 데이터베이스에서는 published = 1
과 같이 정수 리터럴을 사용하여 BOOLEAN 컬럼을 비교하는 쿼리가 작동합니다. 그러나 Postgres는 고유한 BOOLEAN 타입을 지원하며, BOOLEAN 컬럼을 정수와 비교할 경우 오류를 발생시킵니다. Postgres에서는 published = TRUE
또는 published = FALSE
와 같이 BOOLEAN 리터럴을 사용해야만 올바르게 작동합니다.
다행히도 TRUE
와 FALSE
BOOLEAN 리터럴은 MySQL과 SQLite에서도 문제없이 작동합니다. 이는 MySQL과 SQLite가 TRUE
를 1
의 별칭으로, FALSE
를 0
의 별칭으로 처리하기 때문입니다. 따라서 모든 주요 데이터베이스(Postgres, MySQL, SQLite)에서 호환되는 SQL 쿼리를 작성하려면 BOOLEAN 컬럼 비교 시 항상 TRUE
와 FALSE
를 사용하는 것이 최적의 방법입니다.
이러한 방식은 단순히 데이터베이스 호환성만을 제공하는 것이 아닙니다. 쿼리를 읽는 개발자에게 해당 컬럼이 BOOLEAN 타입임을 명확하게 전달하여 코드의 가독성을 크게 향상시킵니다. 1
이나 0
을 사용하는 경우, 해당 값이 BOOLEAN인지 단순히 정수형 값인지 불분명할 수 있지만, TRUE
나 FALSE
를 사용하면 컬럼의 의도를 즉시 파악할 수 있어 불필요한 오해를 방지하고 유지보수 효율성을 높일 수 있습니다.