правильная кодировка файла после загрузки данных из базы данных в R

#mysql #r #database #utf-8

#mysql #r #База данных #utf-8

Вопрос:

Я изучаю, как импортировать данные из базы данных в R. Я использовал следующий код:

 library("RMySQL")
library("dbConnect")

con <- dbConnect(RMySQL::MySQL(),dbname = "database_name",host = "xyz.amazonaws.com",user="xxxxxxx",password="ghujkfgd")
dbListTables(con)

df <- "CALL get_transactions('all');"
df <- dbGetQuery(con, df)
  

но у данных возникли некоторые проблемы с кодировкой:

введите код здесь

Столбец с левой стороны — это столбец, который я экспортирую из базы данных, а столбец с правой стороны — исходный столбец. Может кто-нибудь сказать мне, как я могу прочитать данные с акцентами или специальными символами из базы данных в R. TIA.

Комментарии:

1. Похоже, что данные были закодированы в Latin1, но из вашего сообщения неясно, что у вас есть сейчас. Например, в первом email значении <ed> один символ напечатан в уродливом формате или это 4 символа? Что находится в базе данных, из которой вы читаете?

Ответ №1:

Я решил проблему, используя следующий код:

 library(RMySQL)
library(dbConnect)

con <- dbConnect(RMySQL::MySQL(),dbname = "database_name",host = "xyz.amazonaws.com",user="xxxxxxx",password="ghujkfgd"
dbListTables(con)

df <- "CALL get_transactions('all');"
rs <- dbSendQuery(con, 'set character set "utf8"')
rs <- dbSendQuery(con, df)
data <- fetch(rs, n= -1)


dbDisconnect(con)
  

Ответ №2:

edf3c1e1f1fa являются ли шестнадцатеричные коды для íóÁáñú в CHARACTER SET latin1 .

Вероятно, что-то ожидалось UTF-8 ( CHARACTER SET utf8 или utf8mb4 ) и продолжалось ed , следовательно, сказано Roc<ed>ghf вместо Rocíghf .

Мои заметки о R говорят

 Tool -> Global Options -> Code -> Saving and put UTF-8

rs <- dbSendQuery(con, 'set character set "utf8"')
rs <- dbSendQuery(con, 'SET NAMES utf8')
  

параметры (encoding = «UTF-8») в верхней части моего основного скрипта, из которого вызывается пакет.

Однако это может произойти в обратном направлении, и вам может потребоваться использовать latin1 вместо utf8 .