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 可以毫无问题地处理的值。
我们有一个数据库,有几列是位类型的。使用 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 可以毫无问题地处理的值。