我在多个文件上分布了多个SQL查询(和R计算),应使用sqlQuery()
包中的RODBC
执行这些文件。每个文件都会通过odbcConnect()
打开自己的连接。只要在相应的R脚本内调用查询,这些脚本就可以提供所需的结果。
但是,一旦我尝试通过source()
函数从另一个图元文件执行脚本,我就会从包含非UTF-8字符的查询中得到一个错误(无效字符)。
现在我尝试使用指定不同的编码
odbcConnect(DBMSencoding = "")
odbcConnect(DBMSencoding = "UTF-8")
odbcConnect(DBMSencoding = "UTF8")
odbcConnect(DBMSencoding = "ASCII")
odbcConnect(DBMSencoding = "ANSI")
这不会改变结果。
使用以下命令告诉我,数据库(NLS_CHARACTERSET
)的编码为UTF8
(Oracle数据库)。
SELECT *
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER IN ('NLS_CHARACTERSET');
但是,我无法使包含非UTF-8字符的查询正常工作。
尝试使用source()
在R脚本中执行SQL查询时,编码是否是实际问题?
并有建议如何使其工作吗?
提前谢谢!
[编辑] 这是我的问题的一个简短的可复制示例:
df <- sqlQuery(channel, paste(
"
SELECT NR AS TÄST
FROM TEST.DATA
",
sep = ""))
这在R脚本中有效,但是使用source((paste(path, "script.R", sep=""), print.eval=TRUE, echo=TRUE)
调用脚本时出现以下错误:
"HY000 911 [Oracle][ODBC][Ora]ORA-00911: Invalid character\n"
将“TÄST”更改为“ TEST”,甚至将“TÜST”更改为有效,因为“TÜST”被转换为“TÃST”。因此,我假设编码存在问题。