2017-04-03 4 views
2

ROracle을 사용하여 R에서 Oracle 데이터베이스에 연결 중입니다. 문제는 모든 특수 utf-8 문자에 대해 물음표를 반환하는 것입니다. 일부 중국 값은 확실한 물음표 문자열을 반환합니다. 나는 이것이 패키지의 기적에 대해이 사이트 (또는 다른 사람들)가 다른 질문을 찾지 못해 관련이 있다고 생각합니다. 가장 유망한 질문 중 일부는 MySQL에 대한 대답을 포함합니다 : Fetching UTF-8 text from MySQL in R returns "????"하지만 ROracle을 위해이 작업을 수행 할 수 없었습니다. 이 사이트는 또한 유용한 정보를 제공했습니다. https://docs.oracle.com/cd/E17952_01/mysql-5.5-en/charset-connection.html RODBC를 사용하기 전에 쉽게 uft-8 인코딩을 구성 할 수있었습니다.ROracle 연결 및 utf8 문자 당겨

다음은 몇 가지 샘플 코드입니다 ... 유감스럽게도 utf-8 문자가있는 Oracle 데이터베이스를 사용하지 않으면 복제가 불가능할 수 있습니다. 또한 데이터 프라이버시 이유로 인해 호스트 번호와 sid가 변경되었습니다. ..

library(ROracle) 
drv <- dbDriver("Oracle") 
# Create the connection string 
host <- "10.00.000.86" 
port <- 1521 
sid <- "f110" 
connect.string <- paste(
    "(DESCRIPTION=", 
    "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))", 
    "(CONNECT_DATA=(SID=", sid, ")))", sep = "") 

con <- dbConnect(drv, username = "XXXXXXXXX", 
       password = "xxxxxxxxx",dbname=connect.string) 

my.table <- dbReadTable(con, "DASH_D_PROJECT_INFO") 

my.table[40, 1:3] 

    PROJECT_ID DATE_INPUT PROJECT_NAME 
    211625 2012-07-01 ??????, ?????????????????? ????? ??????, 1869?1917 [????? 3] 

도움을 주시면 감사하겠습니다. 나는 ROracle 패키지의 전체 문서를 읽었으며 utf-8 문자를 작성하는 솔루션이있는 것처럼 보였지만 읽지는 못했습니다.

답변

2

몇 주 후에 좋아요. 제 대답을 찾았습니다. 나는 그것이 다른 누군가에게 가치가 있기를 바랍니다.

내 질문에 대한 답변은 오라클이 데이터를 저장하는 방식에 달려 있습니다. UTF-8 특성을 유지하려면 테이블의 열이 varchar가 아닌 NVARCHAR이어야합니다. 이 시점에서 정규 데이터 가져 오기 및 인코딩은 R에서 예상대로 작동합니다. 나는 틀린 장소에서 오류를 찾고 있었다.

내가 하나가 다음과 같은 방식으로 UTF-8로 변환 할 것 좀 있었다 파일을 작성에서 UTF-8

와 오라클 R에서 UTF-8 데이터를 작성하는 방법에 끊지 언급 할

. 그래서 나는 너무 발걸음을 옮겨서 두 단계로 오라클 테이블에 썼습니다. 결과는 완벽하게 작동했습니다.

Encoding(my.data1$Project.Name) <- "UTF-8" 

my.data1.1 <- my.data1[Encoding(my.data1$Project.Name) == "UTF-8", ] 
my.data1.2 <- my.data1[Encoding(my.data1$Project.Name) != "UTF-8", ] 
attr(my.data1.1$Project.Name, "ora.encoding") <- "UTF-8" 

이 통찰력있는 정보를 찾으면 더 많은 정보를 찾을 수 있습니다.

+0

위대한 답변, 충분히 감사 할 수 없습니다! –