我正在使用RODBC
包从SQL Server读取数据。 R正在读汉字为“?????”
我已将参数DBMSencoding = "UTF-8"
传递给odbcConnect
函数。
以下是我正在使用的示例代码:
Connection <- odbcConnect("abc", uid = "123", pwd = "123",
DBMSencoding = "UTF-8", readOnlyOptimize=T)
Var1 <- sqlQuery(Connection, query, errors = TRUE, stringsAsFactors=F)
可能是我没有按照我应该的方式传递论据?
sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RODBC_1.3-12
loaded via a namespace (and not attached):
[1] tools_3.2.3
odbcGetInfo(mainConnection)
DBMS_Name DBMS_Ver Driver_ODBC_Ver Data_Source_Name Driver_Name
"Microsoft SQL Server" "10.50.4000" "03.52" "SQLSRV32.DLL"
Driver_Ver ODBC_Ver Server_Name
"06.01.7601" "03.80.0000"
答案 0 :(得分:1)
Windows上的R有很多问题在ASCII之外显示字符,即使它通常在内部忠实地表示它们。 this answer中有很多关于为什么会出现这种情况的信息,以及this answer中的一些简单诊断信息。首先尝试绘图,如:
# first, make sure plotting Chinese works in general
# (i.e., you have an appropriate font)
hanzi <- "漢字"
plot(1, 1, type="n")
text(1, 1, hanzi)
如果可以,请将hanzi <- "漢字"
行替换为sql查询行,将数据库中的一些中文文本转换为字符串变量,然后尝试绘制。如果它出现在图上,那么字符读就好并在内部表示正常,问题只是在控制台中显示它们。如果情节适用于&#34;汉字&#34;字符串变量但不适用于SQL提取的字符串,那么至少你知道问题实际上是SQL部分,而不仅仅是在控制台中显示。
答案 1 :(得分:0)
检查数据库的字符编码:
select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.AL32UTF8
在连接到数据库之前更改环境变量NLS_LANG
:
Sys.setenv(NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8")
Connection <- odbcConnect("abc", uid = "123", pwd = "123", DBMSencoding = "UTF-8", readOnlyOptimize=T)
答案 2 :(得分:0)
我遇到了同样的问题并成功解决了它。这很简单。转到控制面板 - &gt;地区和语言 - &gt;行政 - &gt;更改系统区域设置 - &gt;中国。