ROracle连接并提取utf8字符

far*_*kid 4 oracle encoding r utf-8 roracle

我正在使用ROracle从R连接到Oracle数据库。问题是,对于每个特殊的utf-8字符,它都会返回一个问号。一些中文值会返回一连串的问号。我认为这是相关的,因为在此站点(或其他站点)上没有找到其他任何可以回答ROracle软件包的问题。一些最有希望的问题包括MySQL的答案:在R中从MySQL中获取UTF-8文本将返回“ ????”。 但是我无法使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]
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。我已经阅读了ROracle软件包的整个文档,并且似乎有一种解决方案,可以编写utf-8字符,但不能读取它们。

far*_*kid 5

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

我的问题很大程度上由Oracle如何存储数据来回答。如果要保留UTF-8特征,则需要表中的列是NVARCHAR,而不仅仅是varchar。届时,常规数据提取和编码将按预期在R中工作。我在错误的位置寻找错误。

我还想提到一个关于如何使用utf-8将R中的utf-8数据写入Oracle的建议。

在编写文件时,我有些文件无法以以下方式转换为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"
Run Code Online (Sandbox Code Playgroud)

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