Mysql: Как запросить столбец, тип которого является бит? - PullRequest
27 голосов
/ 08 мая 2009

Привет, я использую Hibernate и Mysql. У меня есть класс с логическим атрибутом под названием «активный».

Созданная таблица базы данных имеет тип данных BIT. Все идет нормально. Я хочу запросить это значение, но я не знаю, как это сделать. Я пробовал

 SELECT * from table where active = 1

не работает, ни следующее

 SELECT * from table where active = true

Я не нашел ничего ни в справочном руководстве, ни в Stackoveflow.

Любой намек?

Заранее спасибо!

Ответы [ 6 ]

38 голосов
/ 08 мая 2009
SELECT * FROM table WHERE active = (1)
18 голосов
/ 08 мая 2009

Согласно этой странице , BIT является синонимом TINYINT (1) для версий до 5.0.3 .

Вы пробовали это?

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

Эта запись в блоге предлагает вообще избегать типа данных BIT.

7 голосов
/ 08 мая 2009

Вы пытались привести его к целому числу для сравнения

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

Большую часть времени я использую MS SQL, так что простите, если это не работает, поскольку я не могу проверить его.

7 голосов
/ 08 мая 2009

Чтобы указать битовые значения, можно использовать обозначение b'value.

6 голосов
/ 11 июля 2012

На самом деле MySQL имеет встроенные битовые литералы:

select*from table where active = 0b1
0 голосов
/ 07 сентября 2013

Ну, и для сравнения, и для меня работают 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)

Обновить изменение от 0 до 1 в isfeatured, которое имеет тип 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

Одна строка изменена ... Попробуйте еще раз:

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 + wheezy1 для debian-linux-gnu в x86_64 ((Debian))

...