문제

안녕하세요 저는 Hibernate와 MySQL을 사용하고 있습니다. 'Active'라는 부울 속성이있는 클래스가 있습니다.

생성 된 데이터베이스 테이블에는 비트 데이터 유형이 있습니다. 여태까지는 그런대로 잘됐다. 이 값을 쿼리하고 싶지만 어떻게 해야할지 모르겠습니다. 난 노력 했어

 SELECT * from table where active = 1

작동하지 않습니다

 SELECT * from table where active = true

참조 매뉴얼이나 StackoveFlow에서는 아무것도 찾지 못했습니다.

힌트가 있습니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

SELECT * FROM table WHERE active = (1)

다른 팁

에 따르면 이 페이지, 비트는 Tinyint (1)의 동의어입니다. 5.0.3 이전.

이것을 시도해 보셨습니까?

SELECT * from table where active = (1)
SELECT * from table where active = 'true'
SELECT * from table where active = b'1'

이것 블로그 항목 비트 데이터 유형을 완전히 피하기 위해 제안합니다.

비트 값을 지정하려면 B'Value '표기법을 사용할 수 있습니다.

비교를 위해 정수에 캐스팅 해 보셨습니까?

SELECT * from table where cast(active as unsigned) = 1

나는 MS SQL을 대부분 사용하므로 테스트 할 수 없으므로 이것이 효과가 없다면 용서하십시오.

실제로 MySQL에는 비트 리터럴이 내장되어 있습니다.

select*from table where active = 0b1

글쎄, 비교와 업데이트를 위해 0과 1은 나에게 효과가 있습니다.

다음은 유형 비트 (1), 한 행, 필드는 현재 거짓입니다.

mysql> select isfeatured from nodes where isfeatured = 1;
Empty set (0.00 sec)

mysql> select isfeatured from nodes where isfeatured = 0;
+------------+
| isfeatured |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

ISFEATURED에서 0에서 1으로 변경하는 업데이트, 유형 비트 (1) ...

mysql> update nodes set isfeatured=1 where isfeatured = 0;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

한 행이 변경되었습니다 ... 다시 시도하십시오.

mysql> update nodes set isfeatured=1 where isfeatured = 0;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

예상대로 행이 변경되지 않았습니다.

이전과 동일한 쿼리를 선택합니다.

mysql> select isfeatured from nodes where isfeatured = 1;
+------------+
| isfeatured |
+------------+
|           |
+------------+
1 row in set (0.00 sec)

mysql> select isfeatured from nodes where isfeatured = 0;
Empty set (0.01 sec)

작동합니다.

사용 중입니다 :

MySQL VER 14.14 Distrib 5.5.31, Debian-Linux-GNU (x86_64)를 사용하여 Readline 6.2

그리고

/usr/sbin/mysqld ver 5.5.31-0+x86_64의 데비안-리눅스 -gnu 용 wheezy1 (Debian)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top