ROracle подключается и вытягивает символы utf8

Я подключаюсь к базе данных Oracle из R, используя ROracle. Проблема в том, что для каждого специального символа utf-8 он возвращает вопросительный знак. Некоторые китайские значения возвращают сплошную строку вопросительных знаков. Я считаю, что это актуально, потому что я не нашел другого вопроса на этом сайте (или других), который бы отвечал на этот вопрос для пакета ROracle. Некоторые наиболее многообещающие вопросы включают ответ для MySQL: Текст UTF-8 из MySQL в R возвращает ????, но мне не удалось заставить это работать для ROracle. Этот сайт также предоставил некоторую полезную информацию https://docs.oracle.com/cd/E17952_01/mysql-5.5-en/charset-connection.html Раньше я использовал RODBC и легко мог настроить кодировку uft-8.

Вот пример кода... Мне жаль, что если у вас нет базы данных Oracle с символами utf-8, дублировать ее может быть невозможно... Я также изменил номер хоста и sid по соображениям конфиденциальности данных...

library(ROracle)
drv <- dbDriver("Oracle")
# Create the connection string
host <- "10.00.000.86"
port <- 1521
sid <- "f110"
connect.string <- paste(
  "(DESCRIPTION=",
  "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
  "(CONNECT_DATA=(SID=", sid, ")))", sep = "")

con <- dbConnect(drv, username = "XXXXXXXXX",
                 password = "xxxxxxxxx",dbname=connect.string)

my.table <- dbReadTable(con, "DASH_D_PROJECT_INFO")

my.table[40, 1:3]  

   PROJECT_ID DATE_INPUT PROJECT_NAME
    211625   2012-07-01  ??????, ?????????????????? ????? ??????, 1869?1917 [????? 3]

Любая помощь приветствуется. Я прочитал всю документацию пакетов ROracle, и, похоже, у нее есть решение для записи символов utf-8, но не для их чтения.


person farmkid    schedule 03.04.2017    source источник


Ответы (1)


Хорошо, через несколько недель я нашел свой собственный ответ. Я надеюсь, что это будет полезно для кого-то еще.

На мой вопрос в значительной степени отвечает то, как Oracle хранит данные. Если вы хотите сохранить характеристики UTF-8, вам нужно, чтобы столбец в таблице был NVARCHAR, а не просто varchar. В этот момент обычное извлечение и кодирование данных будет работать в R, как и ожидалось. Я искал ошибку не в том месте.

Я также хочу упомянуть об одном зависании при записи данных utf-8 из R в Oracle с помощью utf-8.

При написании файлов у меня были некоторые, которые не конвертировались в UTF-8 следующим образом. Так что я сделал шаг тоже частями и записал их в два шага в таблицу оракула. Результаты сработали отлично.

Encoding(my.data1$Project.Name) <- "UTF-8"

my.data1.1 <- my.data1[Encoding(my.data1$Project.Name) == "UTF-8", ]
my.data1.2 <- my.data1[Encoding(my.data1$Project.Name) != "UTF-8", ]
attr(my.data1.1$Project.Name, "ora.encoding") <- "UTF-8"

Если вы нашли это проницательным, проголосуйте за него, чтобы больше людей могли его найти.

person farmkid    schedule 21.04.2017
comment
Большое спасибо! Ваш ответ нам очень помог! - person Willy; 19.11.2019