【发布时间】:2012-07-21 12:12:05
【问题描述】:
在我的创建表脚本中,我将 hasMultipleColors 字段定义为 BIT:
hasMultipleColors BIT NOT NULL,
运行 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)
有什么想法吗?
【问题讨论】:
-
你为什么不使用
BOOL而不是BIT呢?从您的字段名称的语义来看,它会更有意义。 -
阅读了一些关于 BOOL、BIT 和 TINYINT 数据类型的资料,我得出的结论是 MySQL 以非常糟糕的方式处理 BOOL - 不能移植到其他 RDBMS 解决方案 - 所以与 TINYINT 或 BIT 一起使用通常是理想的(更高效)。
标签: mysql sqldatatypes