2013-01-09 32 views
33

my_table chứa trường enabled được xác định là: enabled BIT NOT NULL DEFAULT 0.Không thể thấy giá trị trường BIT của MySQL khi sử dụng SELECT

Bảng này có nhiều hàng với enabled = b'0' và nhiều hàng với enabled = b'1'.

Tuy nhiên, cả hai điều này:

SELECT * from my_table WHERE enabled = b'0'; 

và điều này:

SELECT * from my_table WHERE enabled = b'1'; 

chương trống trong cột enabled:

+----+---------+ 
| id | enabled | 
+----+---------+ 
| 1 |   | 
| 2 |   | 
+----+---------+ 

Tại sao vậy? Làm cách nào tôi có thể thấy giá trị của trường enabled?


$ mysql --version 
mysql Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1 

+0

Tại sao các bạn sử dụng 'BIT' thay vì' BOOLEAN'? Bạn có cần lưu trữ nhiều hơn một cờ trong cột đó không? – cdhowie

+0

Thats lẻ. Tôi không thể tái tạo điều đó. Hoạt động [ở đây] (http://sqlfiddle.com/#!2/64482/1) –

Trả lời

50

Lý do tại sao bạn không thể nhìn thấy nó trong thiết bị đầu cuối là bởi vì giá trị bit là các ký tự không thể in được.

Cho phép chèn giá trị sau:

INSERT INTO `my_table` (`ID`, `enabled`) 
VALUES (1,b'1'),(2,b'0'); 

Sau đó chọn chúng sang file:

mysql> SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; 

Đầu tiên cho phép xem tập tin /tmp/my_table.txt của chúng tôi dưới dạng văn bản đơn giản:

"1"," "
" 2 "," "

và sau đó theo quan điểm hex:

22 31 22 2C 22 22 0A 22 32 22 2C 22 22 0A

Để có thể nhìn thấy những giá trị bạn có thể chỉ đơn giản là CAST chúng trong SELECT:

SELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table 

Và tha t sẽ cho kết quả sau:

+----+---------+ 
| id | enabled | 
+----+---------+ 
| 1 |  1 | 
| 2 |  0 | 
+----+---------+ 
2 rows in set (0.00 sec) 
+0

Cảm ơn lời giải thích tuyệt vời! –

+1

Bạn rất hoan nghênh và may mắn khi sử dụng các bit – peterm

+0

cách bật/xem điều này khi sử dụng 'select * from my_table'? –

16

cách đơn giản nhất là ORD chức năng:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table` 
12

Một cách khác bạn có thể làm điều đó là

SELECT enabled+0 from my_table 
+1

Hoạt động tuyệt vời, cảm ơn bạn! –

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