2017-10-04 4 views
1

R에서 DBI 패키지를 사용할 때 "로케일"을 변경하는 데 문제가 있습니다. 특히, 데이터베이스에 "é, è, ê, ..."와 같은 문자가 포함되어 있고 DBI가 올바르게 읽지 않습니다.데이터베이스 연결 로캘을 변경하려면 어떻게합니까?

RODBC 패키지를 사용하여 동일한 쿼리를 수행하면 올바른 결과를 얻습니다. 내 질문 : DBI 패키지를 사용하여 올바른 결과 (예 : 'é, è, ê, ...'를 올바르게 읽음)를 얻으려면 어떻게해야합니까?

이 재현 예를해야한다 :

> 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

16 진수 문자 집합을 전달하는 방법은 http://mysql.rjweb.org/doc.php/charcoll#diagnosing_charset_issues를 참조하십시오. 어쩌면 효과가 있을까요? –

답변

0

당신이 dbConnect 기능에 인코딩 인수를 사용하여 시도 해 봤나 :이 관련된 경우

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) 

, 여기 내 세션 정보입니까? 데이터베이스에서 사용되는 텍스트 인코딩이어야합니다. "데이터베이스가 로컬 인코딩이" "로 설정된 것과 같으면 시스템에서 사용할 수있는 인코딩의 전체 목록을 보려면 iconvlist()를 참조하십시오. 참고 문자열은 항상 UTF-8로 인코딩됩니다."

당신은 시도 할 수 있습니다 :

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

HTH 제임스

관련 문제