2013-09-25 1 views
3

MySQL에서 BIT로 저장된 부울 유형을 선택하는 데 문제가 있습니다. SELECT CAST(1=1 AS SIGNED INTEGER) 또는 SELECT BOOLFIELD + 0과 같은 사용자 지정 쿼리를 사용하여 적절한 비트 값을 표시 할 수 있음을 알고 있습니다. ...MySQL 명령 줄 도구를 사용하여 BIT를 기본적으로 BIT로 저장하는 방법

그러나 명령 줄을 사용하여 우리의 불리언 값을 표시하는 방법이 있습니까? SELECT * FROM TABLE 같은 쿼리를 가진 클라이언트?

업데이트 : 순간 나는 결과 예 만의 공간 참조 : 내가 찾은 일부 인터넷 검색을 통해

mysql> SELECT distinct foo, foo + 0 from table 
+------+-------+ 
| foo | foo_0 | 
+------+-------+ 
|  |  0 | <-- Only space 
|  |  1 | <-- Space, one space less 
+------+-------+ 

를 MySQL의 버그 DB (http://bugs.mysql.com/bug.php?id=28422, http://bugs.mysql.com/bug.php?id=43670)하지만 응답하지 또는 일부 (아마도 관련된) 버그 고치다? 0은 거짓과 0이 아닌 진정한 나타내고 : 정말 하나 (MySQL은 실제 부울 유형이없는 주어진 TINYINT(1)의 별칭)의 MySQL의 BOOLEAN 유형을 사용한다고 저장 논리 값으로

+0

좋은 점은, 미안 내 질문은 꽤 명확했다. 지금 우리는 JPA와 함께 부울 (boolean)을 나타 내기 위해 BIT 유형으로 끝났습니다. – Touko

답변

3

.

바이트에서 부울을 저장처럼을 느낄 수 동안은 BIT(1) 열보다 더 낭비, 하나는 몇 저장 비트 데이터 저장 & 검색의 CPU에 대한 더 비트 운영에 번역 것이라는 점을 기억해야한다; 어쨌든 대부분의 스토리지 엔진이 BIT 열을 다음 바이트 경계로 채울 지 확신 할 수 없습니다.

이 유형 열 사용시을 사용하는 경우 이진 문자열로 반환된다는 점에 유의해야합니다. MySQL 커맨드 라인 클라이언트 (stupidly)는 바이너리 문자열을 (기본 문자 세트를 적용하여) 텍스트로 렌더링하려고하는데, 이것은 여러분이 관찰하는 행동을 일으키는 원인이됩니다. — 이것을 피할 방법이 없습니다 (select 이미 수행중인 것처럼 이진 문자열 이외의 것으로 반환 된 순서대로 나열하십시오. 당신은 또한 은 (명령 행 클라이언트에서 좀 더 이해할 수이기는하지만, bad practice 인) SELECT *를 사용하여를 주장하는 경우

그러나, 당신은 정의 고려할 수있는 조작이 수행되는 view 그에서 다음 SELECT. 예를 들어 :

CREATE VIEW my_view AS SELECT foo + 0 AS foo, bar FROM my_table; 

은 그런 사람은 할 수 :

SELECT * FROM my_view WHERE foo = 1 AND bar = 'wibble'; 
+0

좋은 지적, 생각 해봐야 해. 그리고 예, SELECT *는 테이블 내용 등에 대한 개요를 쉽게 얻기 위해 명령 줄 클라이언트를 사용하는 ad-hoc 쿼리 및 디버깅을 위해서만 사용됩니다. – Touko

+0

@Touko : JPA에서 BOOLEAN을 사용하는 방법은 http://stackoverflow.com/을 참조하십시오. a/10224905. – eggyal

+0

@Downvoter : 댓글을 달았습니까? – eggyal