2009-05-08 29 views
26

Xin chào, tôi đang sử dụng hibernate và Mysql. Tôi có một lớp học với một thuộc tính boolean được gọi là 'hoạt động'.Mysql: Cách truy vấn một cột có loại bit?

Bảng cơ sở dữ liệu được tạo có kiểu dữ liệu BIT. Càng xa càng tốt. Tôi muốn truy vấn giá trị này nhưng tôi không biết cách thực hiện. Tôi đã thử

SELECT * from table where active = 1 

không làm việc, không phải sau

SELECT * from table where active = true 

tôi không tìm thấy bất cứ điều gì không phải trong cuốn hướng dẫn tài liệu tham khảo cũng như tại Stackoveflow.

Bất kỳ gợi ý nào?

Cảm ơn trước!

Trả lời

35
SELECT * FROM table WHERE active = (1) 
+0

câu trả lời của bạn là đúng. Tôi không biết ký hiệu này. – Luixv

7

Để chỉ định giá trị bit, ký hiệu b'value 'có thể được sử dụng.

+0

đúng. Tôi không thể tìm thấy ở hướng dẫn sử dụng. – Luixv

+0

@Luixv - http://dev.mysql.com/doc/refman/5.5/en/bit-type.html –

+0

@Alvaro: Câu hỏi này đã gần 4 tuổi! – Luixv

19

Theo this page, BIT là một từ đồng nghĩa cho TINYINT (1) cho các phiên bản trước 5.0.3.

Bạn đã thử các tính năng này chưa?

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

blog entry này khuyên bạn nên tránh loại dữ liệu BIT hoàn toàn.

+0

Mục nhập đầu tiên và thứ ba là coorect trong khi mục thứ hai không hoạt động, ít nhất là dưới sự cài đặt Mysql của tôi. Dù sao cũng cảm ơn bạn. – Luixv

+0

@Andomar Không đồng ý để tránh loại dữ liệu BIT. Những bất lợi là khả năng tương tác với các phiên bản cũ, giả sử bạn không cần nó, BIT thực sự lưu trữ dữ liệu gọn nhẹ hơn và do đó tiết kiệm không gian lưu trữ. – Pacerier

7

Các bạn đã thử đúc nó vào một Integer để so sánh

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

tôi sử dụng MS SQL hầu hết thời gian để tha thứ cho tôi nếu điều này không làm việc như tôi không thể kiểm tra nó.

+0

Câu trả lời của bạn là chính xác, cảm ơn rất nhiều. – Luixv

6

Trên thực tế MySQL đã được xây dựng trong literals bit:

select*from table where active = 0b1 
0

Vâng, đối với cả hai so sánh và cập nhật, 0 và 1 công việc cho tôi:

Dưới đây là một lĩnh vực loại bit (1), một hàng, lĩnh vực này là hiện sai:

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) 

cập nhật thay đổi 0-1 trong isfeatured, đó là loại bit (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 

Một hàng thay đổi ... Hãy thử nó một lần nữa:

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

Không có hàng thay đổi như mong đợi.

chọn truy vấn tương tự như trước đây:

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) 

Xem, nó hoạt động.

Tôi đang sử dụng:

mysql Ver 14,14 distrib 5.5.31, cho debian-linux-gnu (x86_64) sử dụng readline 6.2

/usr/sbin/mysqld Ver 5.5.31-0 + wheezy1 cho debian-linux-gnu trên x86_64 ((Debian))

Các vấn đề liên quan