【发布时间】:2017-05-09 07:15:09
【问题描述】:
我有一个名为 distTest 的数据框,其中包含 UTF-8 格式的列。我想将distTest 保存为sql database 中的表格。我的代码如下;
library(RODBC)
load("distTest.RData")
Sys.setlocale("LC_CTYPE", "persian")
dbhandle <- odbcDriverConnect('driver={SQL Server};server=****;database=TestDB;
trusted_connection=true',DBMSencoding="UTF-8" )
Encoding(distTest$regsub)<-"UTF-8"
Encoding(distTest$subgroup)<-"UTF-8"
sqlSave(dbhandle,distTest,
tablename = "DistBars", verbose = T, rownames = FALSE, append = TRUE)
我考虑使用DBMSencoding 进行连接和编码Encoding(distTest$regsub)<-"UTF-8"
Encoding(distTest$subgroup)<-"UTF-8"
为我的专栏。但是,当我将其保存到 sql 时,列未以正确的格式显示,它们是这样的;
当我将sqlSave 函数中的fast 设置为FALSE 时,出现此错误;
sqlSave(dbhandle, Distbars, tablename = "DistBars", verbose = T, : 22001 8152 [Microsoft][ODBC SQL Server 驱动程序][SQL 服务器]字符串或二进制数据将被截断。 01000 3621 [Microsoft][ODBC SQL Server Driver][SQL Server]声明已经 终止。 [RODBC] 错误:无法 SQLExecDirect 'INSERT INTO “DistBars”(“regsub”、“week”、“S”、“A”、“F”、“labeled_cluster”、 "子组", "windows" ) 值 ('ظâ€', 5, 4, 2, 3, 'cl1', 'Ø·ÂØ¸â€¦Ø¸â€ž Ø··²Ø·····················',1)'
我还在表格设计中尝试NVARCHAR(MAX) utf-8 列,fast=false 错误消失了,但格式相同。
顺便把here中的一部分数据导出为RData。
我想知道为什么sql server 2016中的数据格式显示不正确?
更新
我完全确信RODBC 包有问题。
我尝试通过
sqlQuery(channel = dbhandle,"insert into DistBars
values(N'7من',NULL,NULL,NULL,NULL,NULL,NULL,NULL)")
作为测试,格式仍然错误。不幸的是,将CharSet=utf8; 添加到连接字符串也不起作用。
【问题讨论】:
-
我对@987654343@ 一无所知,但是Sql Server 的nvarchar / nchar 用于unicode 值。我敢打赌,问题出在字符串到达 sql server 之前,正如错误消息所暗示的那样。
-
感谢@ZoharPeled,但我将 Nvarchar 用于 utf-8 列。我同意你关于出口前的问题。
标签: sql sql-server r utf-8 rodbc