2011-06-14 4 views
2

boolean에 대한 Postgres와 MySql 사이의 리턴 값 차이

내가 이렇게하면 :

ActiveRecord::Base.connection.execute('select 1 as t').first 
Postgres와 MySql에 다음과 같이 나타납니다.

MySql: [1] 
Postgres: {"t"=>"1"} 

누군가가 그게 뭔지 설명 할 수 있습니까?!

+0

아마도 MySQL 드라이버의 버그입니다. 그것을 개발자에게보고하십시오 ... –

+0

저는 차라리 postgres 드라이버의 버그라고 말하고 싶습니다. 1은 int이며 문자열로 반환됩니다 ... – jriff

+1

둘 다 버그가 있습니다. 정수는 MySQL의 경우 이름과 함께 반환되어야합니다 ... –

답변

0

버그가있는 위치와 상관없이이 두 데이터베이스의 흥미로운 차이점을 보여줍니다 (크로스 db 추상화가 어려운 이유의 예).

MySQL에는 true bool 유형이 없습니다. 부울 값으로 tinyints를 사용합니다. MySQL을

:

SELECT true; 
+------+ 
| TRUE | 
+------+ 
| 1 | 
+------+ 
1 row in set (0.00 sec) 

부울 표현식은 정수로 평가 :

select true is not false; 
+-------------------+ 
| true is not false | 
+-------------------+ 
|     1 | 
+-------------------+ 
1 row in set (0.00 sec) 

PostgreSQL을에

의 PostgreSQL는 't'중 하나와 진정한 부울 유형을 지원 또는 'f'가 반환됩니다.

select true; 
bool 
------ 
t 
(1 row) 

select true is not false; 
?column? 
---------- 
t 
(1 row) 

참고도 부울로의 int 전송할 수 있습니다 :이 패키지의

select 1::bool; 
bool 
------ 
t 
(1 row) 

select 2::bool; 
bool 
------ 
t 
(1 row) 

select 0::bool; 
bool 
------ 
f 
(1 row) 

분명 두 저자는 부울 유형의 문제를 해결하는 방법에 대한 다른 생각을 가지고 있었다.