RMySQL错误地使用类型位查询列

时间:2015-01-27 19:58:12

标签: mysql r rmysql

我们有一个数据库,有几列是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.任何人都知道为什么会发生这种情况并且潜在的工作?提前致谢

1 个答案:

答案 0 :(得分:4)

对于变通方法,您可以在MySQL中使用IF子句:

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

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