连接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')
}))