У меня есть фрейм данных с именем 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;
в строку подключения тоже не работает.
r
, но nvarchar / nchar Sql Server используются для значений Unicode. Я уверен, что проблема заключается в том, что строка даже не попадает на сервер sql, как следует из сообщения об ошибке. - person Zohar Peled   schedule 09.05.2017