MySQL总是将BIT值返回为空白

Cdr*_*ndr 37 mysql sqldatatypes

从我的create table脚本中,我将hasMultipleColors字段定义为BIT:

hasMultipleColors BIT NOT NULL,
Run Code Online (Sandbox Code Playgroud)

运行INSERT时,不会为此或其他BIT字段抛出警告,但选择行会显示所有BIT值都为空.

手动尝试从命令行更新这些记录会产生奇怪的效果 - 显示记录匹配并更改(如果适用),但仍然始终显示为空白.

服务器版本: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)
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

RTB*_*RTB 54

您需要将位字段转换为整数.

mysql> select hasMultipleColors+0 from pumps where id = 1;
Run Code Online (Sandbox Code Playgroud)

这是因为一个错误,请参阅:http://bugs.mysql.com/bug.php?id = 43670.状态说:不会修复.


A J*_*A J 7

您可以将BIT字段转换为无符号.

  SELECT CAST(hasMultipleColors AS UNSIGNED) AS hasMultipleColors 
  FROM pumps 
  WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

它将根据值返回1或0 hasMultipleColors.


mih*_*imi 6

您需要执行bit 1不可打印的转换.

SELECT hasMultipleColors+0 from pumps where id = 1;

在这里查看更多:http: //dev.mysql.com/doc/refman/5.0/en/bit-field-literals.html