2017-10-04 137 views
1

在R中使用DBI包時,我無法更改「語言環境」。更具體地說,我的數據庫包含「é,è,ê,...」等字符,而且DBI不能正確讀取它們。如何更改數據庫連接區域設置?

當我使用RODBC軟件包執行相同的查詢時,它確實爲我提供了正確的結果。我的問題:如何用DBI軟件包得到正確的結果(即正確讀取「é,è,ê,...」)?

這應該是一個可重複的例子:

sql <- "select * from myDatabase.dbo.myTable" 
# Where myTable contains any of the difficult characters 

# Try with DBI 
library(odbc) 
library(DBI) 

conDBI <- dbConnect(
    odbc::odbc(), 
    dsn = "myDsn", 
    UID = myLogin, 
    PWD = myPassword, 
    Port = 1433 
) 

table_DBI <- dbGetQuery(conDBI, sql) 

# Try with RODBC 
library(RODBC) 

conRODBC <- odbcConnect(
    "myDsn", 
    uid = myLogin, 
    pwd = myPassword 
) 

table_RODBC <- sqlQuery(conRODBC, sql) 

在這種情況下是相關的,這裏是我的會話信息:

> sessionInfo() 
R version 3.4.0 Patched (2017-06-02 r72765) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

Matrix products: default 

locale: 
[1] LC_COLLATE=Dutch_Belgium.1252 LC_CTYPE=Dutch_Belgium.1252 LC_MONETARY=Dutch_Belgium.1252 LC_NUMERIC=C     
[5] LC_TIME=Dutch_Belgium.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets tools  methods base  

other attached packages: 
[1] RODBC_1.3-15 DBI_0.6-1 odbc_1.1.1 

loaded via a namespace (and not attached): 
[1] bit_1.1-12  compiler_3.4.0 hms_0.3  tibble_1.3.3 Rcpp_0.12.11 bit64_0.9-7 blob_1.1.0  rlang_0.1.1 
+0

你有沒有看這個:https://stackoverflow.com/questions/38363566/trouble-with-utf-8-characters-what-我看到的不是我存儲的東西? –

+1

這似乎表明我需要改變數據存儲在數據庫中的方式。但是我正在使用一個不受我控制的公司範圍的數據庫。所以我需要一個解決方案來修復它(使用DBI包)在我身邊。這應該是可能的,因爲RODBC包就是這樣做的。 – Willem

+0

查看http://mysql.rjweb.org/doc.php/charcoll#diagnosing_charset_issues瞭解如何傳遞十六進制字符集。也許這會工作? –

回答

0

您是否嘗試過使用的編碼參數的數據庫連接功能?它應該是數據庫上使用的文本編碼。 「如果數據庫與本地編碼設置爲」「相同,請參閱iconvlist()以獲取系統上可用編碼的完整列表。註釋字符串始終以UTF-8編碼形式返回。」

您可以試試:

conDBI <- dbConnect( 
odbc::odbc(), 
dsn = "myDsn", 
UID = myLogin, 
PWD = myPassword, 
Port = 1433, 
encoding = "latin1") 

HTH詹姆斯