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, но не для их чтения.
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"
Если вы нашли это проницательным, дайте ему возможность проголосовать, чтобы другие могли его найти.