PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Codificação de texto UTF-8 / Unicode com RPostgreSQL


Como Craig Ringer disse, definir client_encoding para windows-1252 provavelmente não é a melhor coisa a fazer. De fato, se os dados que você está recuperando contiverem um único caractere exótico, você está com problemas:

Por outro lado, fazer com que seu ambiente R use Unicode pode ser impossível (tenho o mesmo problema que você com Sys.setlocale ... O mesmo em esta pergunta também.).

Uma solução alternativa é declarar manualmente a codificação UTF-8 em todos os seus dados, usando uma função como esta:
set_utf8 <- function(x) {
  # Declare UTF-8 encoding on all character columns:
  chr <- sapply(x, is.character)
  x[, chr] <- lapply(x[, chr, drop = FALSE], `Encoding<-`, "UTF-8")
  # Same on column names:
  Encoding(names(x)) <- "UTF-8"
  x
}

E você tem que usar esta função em todas as suas consultas:
set_utf8(dbGetQuery(con, "SELECT myvar FROM mytable"))

EDITAR: Outra possibilidade é usar RPostgres em vez de RPostgreSQL. Eu testei (com a mesma configuração da sua pergunta) e, até onde posso ver, todas as codificações declaradas são definidas automaticamente como UTF-8.