保存的数据框未在 sql server 中正确显示

Posted

技术标签:

【中文标题】保存的数据框未在 sql server 中正确显示【英文标题】:saved data frame is not shown correctly in sql server 【发布时间】: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)&lt;-"UTF-8" Encoding(distTest$subgroup)&lt;-"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; 添加到连接字符串也不起作用。

【问题讨论】:

我对@9​​87654343@ 一无所知,但是Sql Server 的nvarchar / nchar 用于unicode 值。我敢打赌,问题出在字符串到达​​ sql server 之前,正如错误消息所暗示的那样。 感谢@ZoharPeled,但我将 Nvarchar 用于 utf-8 列。我同意你关于出口前的问题。 【参考方案1】:

我在我的代码中遇到了同样的问题,我设法解决了它,从我的连接配置中消除了rows_at_time = 1

【讨论】:

以上是关于保存的数据框未在 sql server 中正确显示的主要内容,如果未能解决你的问题,请参考以下文章

Datagridview组合框未在单击/编辑时选择

Ajax AutoCompleteExtender文本框未在边缘浏览器中触发文本更改事件

schemacrawler 未在 MS sql server db 的图形选项中显示关系/边

ExtJS 组合框未在面板中加载

DBEAVER 未在 DDSL 中显示 SQL Server 聚集索引

SQL Server Compact 4.0 未在 Visual Studio 2010 中显示