PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

UTF-8 / Unicode-Textcodierung mit RPostgreSQL

Wie Craig Ringer sagte, setze client_encoding zu Windows-1252 ist wahrscheinlich nicht das Beste, was zu tun ist. Wenn die Daten, die Sie abrufen, ein einzelnes exotisches Zeichen enthalten, haben Sie in der Tat ein Problem:

Andererseits könnte es unmöglich sein, Ihre R-Umgebung dazu zu bringen, Unicode zu verwenden (ich habe das gleiche Problem wie Sie mit Sys.setlocale ... Gleiches gilt für diese Frage auch.).

Eine Problemumgehung besteht darin, die UTF-8-Codierung manuell für alle Ihre Daten zu deklarieren, indem Sie eine Funktion wie diese verwenden:

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
}

Und Sie müssen diese Funktion in all Ihren Abfragen verwenden:

set_utf8(dbGetQuery(con, "SELECT myvar FROM mytable"))

BEARBEITEN: Eine andere Möglichkeit ist die Verwendung von RPostgres anstelle von RPostgreSQL. Ich habe es getestet (mit der gleichen Konfiguration wie in Ihrer Frage), und soweit ich sehen kann, werden alle deklarierten Codierungen automatisch auf UTF-8 gesetzt.