R连接postgresql中文乱码

连接postgresql

library('RPostgreSQL')
pgdriver <- dbDriver("PostgreSQL")
key <- dbConnect(
  pgdriver,host = "192.168.1.121", port = "5432", dbname = "test_project", 
  user = "postgres", password = "123456"
  )

windows 下的中文字符编码问题

查询含有中文的表时,可能报错:

Error in postgresqlExecStatement(conn, statement, ...) : 
  RS-DBI driver: (could not Retrieve the result : 错误:  编码"UTF8"的字符0x0xc2 0xa0在编码"GBK"没有相对应值
)

解决方式:
查询编码格式,为GBK,而数据库中为UTF-8.

dbGetQuery(key, "SHOW CLIENT_ENCODING")
 client_encoding
1             GBK

设置连接编码为UTF-8

postgresqlpqExec(con, "SET client_encoding = 'UTF-8'")

查询成功, 但是显示乱码

temp <- dbGetQuery(con,'select * from public."temp"')
head(temp)
   class                          company_name
1 姘戣惀       21涓栫邯涓嶅姩浜ф祼鐏炰竴鍙峰簵
2 姘戣惀 21涓栫邯涓嶅姩浜ф垚閮芥俯姹熷尯鍩\x9f

由于window下R的客户端为GBK编码,因此需要将UTF-8 格式的数据转回GBK格式才能正常显示。可以通过icov函数进行转码。

temp <- as.data.frame(apply(temp, 2, function(x){
  iconv(x, 'UTF-8', 'GBK')
}))

你可能感兴趣的:(R,bug)