我的数据框名为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时,列的格式不正确,它们是这样的;
当我将fast
函数中的sqlSave
设置为FALSE
时,我收到此错误;
sqlSave中的错误(dbhandle,Distbars,tablename =“DistBars”,verbose = T,:22001 8152 [Microsoft] [ODBC SQL Server驱动程序] [SQL 服务器]字符串或二进制数据将被截断。 01000 3621 [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]语句已经过 终止。 [RODBC]错误:无法SQLExecDirect'插入 “DistBars”(“regsub”,“week”,“S”,“A”,“F”,“labeled_cluster”, “subgroup”,“windows”)VALUES('ظ',5,4,2,3,'cl1','Ø·Âظ¸|¸¸€ Ø·ØØ··············,1)'
我在NVARCHAR(MAX)
表的utf-8
列中尝试了fast=false
RData
错误消失,但格式错误相同。
顺便说一下,部分数据会在here中导出为sql server 2016
。
我想知道为什么数据格式在RODBC
中没有正确显示?
更新
我完全相信sqlQuery(channel = dbhandle,"insert into DistBars
values(N'7من',NULL,NULL,NULL,NULL,NULL,NULL,NULL)")
包有问题。
我试着插入表格
CharSet=utf8;
作为测试,格式仍然是错误的。不幸的是,将---> System.InvalidCastException: Unable to cast object of type '' to type 'System.String'.
at System.Data.DataColumn.IsMaxLengthViolated()
at System.Data.DataTable.EnableConstraints()
at System.Data.DataTable.EndLoadData()
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
添加到连接字符串不起作用。
答案 0 :(得分:0)
我在我的代码中遇到了同样的问题,我设法修复了它,从我的连接配置中消除了 rows_at_time = 1
。