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

提问

我们有一个数据库,几个列的类型为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命令提示符下查询表:

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

如您所见,“数据”中的所有aBit单元均设置为0.有人知道为什么会发生这种情况以及潜在的解决方法吗?提前致谢

最佳答案

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

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

这将防止MySQL返回一点,并应产生R可以毫无问题地处理的值.