ROracle 连接并拉取 utf8 字符
ROracle connect and pull utf8 characters
我正在使用 ROracle 从 R 连接到 Oracle 数据库。问题是对于每个特殊的 utf-8 字符,它 returns 都是一个问号。有些中文值returns一串实心的问号。我相信这是相关的,因为我还没有在这个网站(或其他网站)上找到任何其他问题来回答 ROracle 包的这个问题。
一些最有前途的问题包括 MySQL 的答案:Fetching UTF-8 text from MySQL in R returns "????" but I was unable to make this work for ROracle. This site also provided some useful information 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 字符的解决方案,但没有用于读取它们的解决方案。
好吧,几周后我找到了自己的答案。我希望它对其他人有价值。
我的问题主要由 Oracle 如何存储数据来回答。如果你想保留 UTF-8 特性,你需要 table 中的列是一个 NVARCHAR 而不仅仅是一个 varchar。届时,常规数据拉取和编码将按预期在 R 中工作。我在错误的地方寻找错误。
我还想提一个关于如何使用 utf-8 将 utf-8 数据从 R 写入 Oracle 的问题
在编写文件时,我遇到了一些无法按以下方式转换为 UTF-8 的文件。所以我把这一步分成两部分,分两步写到 oracle table。结果非常完美。
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"
如果您发现这个有见地的人,请给它投赞成票,以便更多人可以找到它。
我正在使用 ROracle 从 R 连接到 Oracle 数据库。问题是对于每个特殊的 utf-8 字符,它 returns 都是一个问号。有些中文值returns一串实心的问号。我相信这是相关的,因为我还没有在这个网站(或其他网站)上找到任何其他问题来回答 ROracle 包的这个问题。 一些最有前途的问题包括 MySQL 的答案:Fetching UTF-8 text from MySQL in R returns "????" but I was unable to make this work for ROracle. This site also provided some useful information 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 字符的解决方案,但没有用于读取它们的解决方案。
好吧,几周后我找到了自己的答案。我希望它对其他人有价值。
我的问题主要由 Oracle 如何存储数据来回答。如果你想保留 UTF-8 特性,你需要 table 中的列是一个 NVARCHAR 而不仅仅是一个 varchar。届时,常规数据拉取和编码将按预期在 R 中工作。我在错误的地方寻找错误。
我还想提一个关于如何使用 utf-8 将 utf-8 数据从 R 写入 Oracle 的问题
在编写文件时,我遇到了一些无法按以下方式转换为 UTF-8 的文件。所以我把这一步分成两部分,分两步写到 oracle table。结果非常完美。
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"
如果您发现这个有见地的人,请给它投赞成票,以便更多人可以找到它。