MySQL:Как запросить столбец битового типа?
Вопрос
Привет, я использую спящий режим и Mysql.У меня есть класс с логическим атрибутом «активный».
Сгенерированная таблица базы данных имеет тип данных BIT.Все идет нормально.Я хочу запросить это значение, но не знаю, как это сделать.я пробовал
SELECT * from table where active = 1
не работает ни следующее
SELECT * from table where active = true
Я ничего не нашел ни в справочном руководстве, ни на Stackoveflow.
Есть какой-нибудь намек?
Заранее спасибо!
Решение
SELECT * FROM table WHERE active = (1)
Другие советы
По данным этой страницы , 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.
Чтобы указать битовые значения, можно использовать обозначение b'value. Р>
Вы пытались привести его к целому числу для сравнения
SELECT * from table where cast(active as unsigned) = 1
Большую часть времени я использую MS SQL, так что извините, если это не работает, поскольку я не могу его протестировать.
На самом деле MySQL имеет встроенные битовые литералы:
select*from table where active = 0b1
Ну, как для сравнений, так и для обновлений у меня работают 0 и 1:
Вот поле типа бит(1), одна строка, в данный момент поле имеет значение false:
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, что является типом бит(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 версии 14.14. Распространение 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))