RMySQL 错误地查询类型为 bit 的列

RMySQL incorrectly querying column with type bit

我们有一个数据库,有几列是位类型的。使用 RMySQL 包查询它们时,会返回不正确的结果。要重现,在 SQL 提示符中:

CREATE TABLE suppliers
( aId varchar(10) not null,
  aBit bit not null
);

INSERT INTO suppliers (aId, aBit) VALUES ("First", 0);
INSERT INTO suppliers (aId, aBit) VALUES ("Second", 1);
INSERT INTO suppliers (aId, aBit) VALUES ("Third", 0);
INSERT INTO suppliers (aID, aBit) VALUES ("Fourth", 1);

然后我可以运行:

select * from suppliers

我得到:

+--------+------+
| aId    | aBit |
+--------+------+
| First  |      |
| Second | ☺    |
| Third  |      |
| Fourth | ☺    |
+--------+------+
4 rows in set (0.00 sec

很好,但是如果我尝试在 R 命令提示符中查询 table:

library(RMySQL)
mydb = dbConnect(MySQL(), user='root', password='password1', dbname='test', host='localhost')
query = dbSendQuery(mydb,"select * from suppliers")
data = fetch(query, n=-1)
summary(data)

在我的机器上产生:

aId                 aBit  
 Length:4           Min.   :0  
 Class :character   1st Qu.:0  
 Mode  :character   Median :0  
                    Mean   :0  
                    3rd Qu.:0  
                    Max.   :0

如您所见,"data" 中的所有 aBit 单元都设置为 0。有人知道为什么会发生这种情况以及可能的解决方法吗?提前致谢

要解决此问题,您可以在 MySQL 中使用 IF 子句:

select aId,IF(aBit,'1','0') as aBit from suppliers

这会稍微阻止 MySQL 从 return 并且应该产生一个 R 可以毫无问题地处理的值。