我在使用ROracle从Oracle数据库导入挪威字符(例如æ,ø和å)时遇到问题。我以前和RODBC有类似的问题。从csv和xlsx这样的文件导入时我没有问题,我确定问题在于使用ROracle导入时设置编码,但文档并没有真正告诉我如何做到这一点。
各种答案写入导入后转换为UTF-8的功能,但这不是一个适合我的解决方案。我希望使用dplyr包对oracle DB进行查询,并且需要能够使用æøå
之类的字母进行查询。
这是我的连接字符串,以及我用作测试的sql-query:
library(ROracle)
drv <- dbDriver("Oracle", unicode_as_utf8 = TRUE, ora.attributes = TRUE)
# Create the connection string
host <- "xx.xxx.xx.x"
port <- xxxx
sid <- "xxxxxx"
connect.string <- paste(
"(DESCRIPTION=",
"(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
"(CONNECT_DATA=(SID=", sid, ")))", sep = "")
con <- dbConnect(drv, username = "",
password = "",dbname=connect.string)
test <- dbGetQuery(con, "SELECT DECODE FROM T_CODE where key_id=17")
这给了我这样的结果:R?dgivningskontor
这是我的会话信息:
R version 3.5.0 (2018-04-23)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.4
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ROracle_1.3-1 DBI_1.0.0
loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0 yaml_2.1.19
答案 0 :(得分:0)
我已经为这个问题苦苦挣扎了2天,但我刚刚找到了解决方案。
我的问题是正确显示类似“ü”或“é”的字符(出于测试目的,我还添加了“ø”,显示为“?”)。 我试图以不同的方式和不同的字符集设置NLS_LANG环境变量。
最后,这些是对我有用的步骤:
NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
添加到.Renviron
文件中。这适用于我的情况,其中Oracle DB显示NLS_CHARACTERSET=WE8ISO8859P15
,而客户端的Locale ID显示en_US.UTF-8
。在运行并再次查询数据库时,此时字符已正确显示。