2015-01-27 2 views
2

У нас есть база данных и несколько столбцов имеют бит типа. При запросе их с помощью пакета RMySQL возвращаются неверные результаты. Для того, чтобы воспроизвести, в SQL строке:RMySQL неправильно запрашивает столбец с типом бит

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. Любой знает, почему это происходит, и потенциальные обходные работы? Заранее спасибо

+0

Теперь это исправлено в версии dev, но см. Https://github.com/rstats-db/RMySQL/issues/20 для получения более подробной информации. – hadley

ответ

2

Для решения проблемы, вы можете использовать IF пункт в MySQL:

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

Это предотвратит MySQL от возвращения немного, и должен производить значение, R может работать без проблем.

+2

'SELECT aId, aBit + 0 AS aBit FROM поставщиков' немного проще – hadley

Смежные вопросы