Ответ 1
Вам нужно указать поле бит в целое число.
mysql> select hasMultipleColors+0 from pumps where id = 1;
Это из-за ошибки, см.: http://bugs.mysql.com/bug.php?id=43670. Статус говорит: не исправит.
Из моей таблицы create script я определил поле hasMultipleColors как BIT:
hasMultipleColors BIT NOT NULL,
При запуске INSERT для этого или других полей BIT не отображаются предупреждения, но выбор строк показывает, что все значения BIT пустые.
В ручном режиме UPDATE эти записи из командной строки дают нечетный эффект - показывает, что запись была сопоставлена и изменена (при необходимости), но все равно всегда отображается пустым.
Версия сервера: 5.5.24-0ubuntu0.12.04.1 (Ubuntu)
mysql> update pumps set hasMultipleColors = 1 where id = 1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select hasMultipleColors from pumps where id = 1;
+-------------------+
| hasMultipleColors |
+-------------------+
| |
+-------------------+
1 row in set (0.00 sec)
mysql> update pumps set hasMultipleColors = b'0' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select hasMultipleColors from pumps where id = 1;
+-------------------+
| hasMultipleColors |
+-------------------+
| |
+-------------------+
1 row in set (0.00 sec)
Любые мысли?
Вам нужно указать поле бит в целое число.
mysql> select hasMultipleColors+0 from pumps where id = 1;
Это из-за ошибки, см.: http://bugs.mysql.com/bug.php?id=43670. Статус говорит: не исправит.
Вам необходимо выполнить преобразование, поскольку bit 1
не может быть распечатано.
SELECT hasMultipleColors+0 from pumps where id = 1;
Подробнее здесь: http://dev.mysql.com/doc/refman/5.0/en/bit-field-literals.html
Вы можете отличить поле BIT от unsigned.
SELECT CAST(hasMultipleColors AS UNSIGNED) AS hasMultipleColors from pumps where id = 1
Он вернет 1 или 0 на основе значения hasMultipleColors
.
Фактическая причина эффекта, который вы видите, заключается в том, что он сделан правильно и как ожидалось.
Поле bit
имеет биты и, таким образом, возвращает биты и пытается вывести один бит в качестве символа, будет отображать символ с заданным битовым значением - в этом случае символ управления нулевой шириной.
Некоторое программное обеспечение может обрабатывать это автоматически, но для командной строки MySQL вам нужно каким-то образом передать его как int (например, добавив нуль).
В таких языках, как PHP, порядковое значение символа даст вам правильное значение, используя функцию ord()
(хотя, чтобы быть действительно правильной, ее пришлось бы преобразовать из десятичной в двоичную строку, чтобы работать для битных полей длиннее одного символа).
EDIT:
Найден довольно старый источник, говорящий, что он изменился, поэтому обновление MySQL может заставить все работать как можно скорее: http://gphemsley.wordpress.com/2010/02/08/php-mysql-and-the-bit-field-type/