R连接postgresql中文乱码

7 篇文章 0 订阅

连接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')
}))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值