Как правильно кодировать данные перед их вставкой в ​​базу данных SQL - PullRequest
1 голос
/ 07 мая 2020

Проблемы с кодированием всегда болезненны. Вот что я пытаюсь сделать:

Пример данных test.txt:

Surname;Name
Şahin;Pakiz
Köpke;Marti

Я прочитал в (кодированном UTF-8) файле, используя

test <- fread(dec = ",", header = T, sep = ";", colClasses = "character", fill = T, encoding = "UTF-8", ...)

Когда я показываю данные, я получаю следующее

> test

   Surname  Name
1:   Sahin Pakiz
2:   Köpke Minna

, и когда я хочу получить только Surname, я получаю

> test$Surname

[1] "Şahin" "Köpke"

, который до сих пор отображается правильно.

Теперь я хочу записать таблицу в свою базу данных SQL, используя

dplyr::copy_to(con, df=test, name="TestTable",
        temporary = FALSE, types=rep("nvarchar(MAX)", ncol(dt)))

, что в базе данных дает

enter image description here

Я предположил, что строки в кодировке UTF-8 подойдут для серверов MS SQL. Я ошибался. Я не уверен, где мне нужно внести изменения. Но давайте предположим, что данные всегда доставляются в кодировке UTF-8.

Есть идеи, с чего начать?

1 Ответ

1 голос
/ 07 мая 2020

Вы должны проверить текущее сопоставление, которое вы используете.

SELECT Name, Description FROM fn_helpcollations() WHERE Name LIKE '%UTF8';

Или для сервера:

SELECT SERVERPROPERTY('Collation')

As Sql Сервер был создан engli sh людьми , в нем часто отсутствуют символы UTF-8 или UTF-16. При создании столбца вы должны указать, что вы используете UTF-8:

CREATE TABLE dbo.TestTable (
    Name NVARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8,
    Surname NVARCHAR(50) Latin1_General_100_CI_AI_SC_UTF8
);

Дополнительная информация здесь

...