2016-08-02 38 views
0

我使用這個代碼:導入從SQL Server俄語字符至R數據框

library(RODBC) 
sql3 <- "SELECT TOP 10 Address AS Addr 
    FROM dbo.Address 
    Where CountryCode = 'RU'" 
con <- odbcDriverConnect('driver={SQL SERVER};server=servername;database=databasename;trusted_connection=true') 
df <- as.data.frame(sqlQuery(con,sql3),stringsASFactors=FALSE) 
print(df) 

將會產生以下結果:

> print(df) 
                   Addr 
    1         115573, ??????, ???????? ?-?, ?.22? 
    2       107113 ??????, ????? ???????????, ??? 26 
    3       142200 ??, ?.????????, ??????????? ?., ?. 1 
    4     614022 ?????, ?????????????? ?????, ??. ????, 37? 
    5    109453 ?. ?????? ????????????? ????????, ?. 19, ???. 2 
    6         129282 ??????, ??. ???????, ?.13-? 
    7       603000 ?????? ????????, ??????? ????????, 2 
    8     103164 ??????, ????? ??????? ???????????, ??? 26 
    9    197341, ?????-?????????, ??-? ???????????, ?.19, ????.2 
    10 429950, ?????????? ???????, ?. ??????????????, ??. ??????????, 42? 

結果應該是俄羅斯的地址的列表。

正如你可以看到,也許,所有的「正規軍」字符越來越細的進口(如數字),但俄文字符都賺不到它。我猜想我需要在達到數據框之前設置字符編碼,但我不知道該怎麼做。另外要說明的是,當從SSMS查詢數據時,出現正確的地址字符。

任何指針將不勝感激,謝謝。

+0

或許,這可能有助於[R中的回報從MySQL擷取UTF-8文本「????」( http://stackoverflow.com/questions/12869778/fetching-utf-8-text-from-mysql-in-r-returns) – Miha

+0

搜索'?sqlQuery'爲 「編碼」 指向'?odbcConnect',其中提到的'DMSencoding'參數。嘗試在連接時將其設置爲「UTF-8」。 – Gregor

+0

它也有樂於助人的音符*「如果有可能設置DBMS或ODBC驅動程序中的字符集R對話則應該是這樣的。例如通信中,MySQL可以設置通過SQL,如設置通信字符SET NAMES'utf8'。「*,它可能適用於或不適用於SQL Server。 – Gregor

回答

0

的?將返回非英文字符,除非您指定N強制unicode。

SELECT 'ук ферт хер'  --returns ?? ???? ??? 
SELECT N'ук ферт хер' --returns ук ферт хер 

最重要的是,這必須在插入完成...

drop table #country 
create table #country (names nvarchar(50)) 
insert into #country(names) values (N'Россия'),('Россия') 

SELECT names FROM #country 

--Results 
-------------------------- 
names 
-------------------------- 
Россия 
?????? 
------------------------- 
+0

我已經使用了前一段動態SQL,但我不認爲它適用於這種案件。在我的代碼中選擇TOP 10 N'Address1'...將只返回10行Address1。就插入數據而言,它已經在sql server中正確編碼了,當它進入R環境時,有些東西只是不知所措。 –

+0

所以如果你選擇SSMS中的數據,它會正確返回@LRobin – scsimon

+0

正確。 @scsimon –