сохраненный фрейм данных некорректно отображается на сервере sql

У меня есть фрейм данных с именем 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 Server] Строка или двоичные данные будут усечены. 01000 3621 [Microsoft] [ODBC SQL Драйвер сервера] [SQL Server] Оператор был прерван. [RODBC] ОШИБКА: не удалось SQLExecDirect 'INSERT INTO «DistBars» («regsub», «week», «S», «A», «F», «labeled_cluster» "," подгруппа "," окна ") ЗНАЧЕНИЯ ('ظ⠀', 5, 4, 2, 3, 'cl1', 'Ø · Âظ⠀ ¦Ø¸â € ž Ø · Â²Ø · ¨ Ø · §ظ⠀ žØ¸â € ¡', 1)'

Я также пробовал NVARCHAR(MAX) для utf-8 столбца в дизайне таблицы с fast=false ошибка исчезла, но та же ошибка с форматом.

Кстати, часть данных экспортируется как RData в здесь.

Я хочу знать, почему формат данных отображается неправильно в sql server 2016?

ОБНОВЛЕНИЕ

Я полностью уверен, что с пакетом RODBC что-то не так. Я пробовал вставить в таблицу до sqlQuery(channel = dbhandle,"insert into DistBars values(N'7من',NULL,NULL,NULL,NULL,NULL,NULL,NULL)")

как тест, а формат все равно неправильный. К сожалению, добавление CharSet=utf8; в строку подключения тоже не работает.


person Zahra Aminolroaya    schedule 09.05.2017    source источник
comment
Я ничего не знаю о r, но nvarchar / nchar Sql Server используются для значений Unicode. Я уверен, что проблема заключается в том, что строка даже не попадает на сервер sql, как следует из сообщения об ошибке.   -  person Zohar Peled    schedule 09.05.2017
comment
Спасибо @ZoharPeled, но я использовал Nvarchar для столбцов utf-8. Я согласен с вами насчет проблемы перед экспортом.   -  person Zahra Aminolroaya    schedule 09.05.2017


Ответы (1)


У меня была такая же проблема в моем коде, и мне удалось ее исправить, исключив rows_at_time = 1 из конфигурации подключения.

person Mikel Blanco    schedule 03.03.2021