ROracle连接并拉取utf8字符

时间:2017-04-03 15:42:53

标签: r oracle encoding utf-8 roracle

我使用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编码。

以下是一些示例代码......很抱歉,除非您有一个带有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字符的解决方案,但不是为了阅读它们。

1 个答案:

答案 0 :(得分:4)

好几周后我找到了自己的答案。我希望它对其他人有价值。

我的问题在很大程度上取决于Oracle如何存储数据。如果您希望保留UTF-8特性,则需要表中的列是NVARCHAR而不仅仅是varchar。此时,常规数据提取和编码将按预期在R中起作用。我在错误的地方寻找错误。

我还想提一下如何使用utf-8

从DC到Oracle编写utf-8数据

在编写文件时,我有一些不能以下列方式转换为UTF-8的文件。所以我做了很多部分的步骤,并分两步写入oracle表。结果非常有效。

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"

如果你发现这个有见地的人给它一个投票,那么更多的人可以找到它。