R连接mysql数据库

RMysql包是一个不错的工具。
简单示例1:

install.packages("RMySQL")
library(RMySQL)
conn <- dbConnect(MySQL(), dbname = "test1", username="root", password="123456", host="127.0.0.1", port=3306)
#创建数据库表并写入数据
dbWriteTable(conn, "mtcars", mtcars[1:10, ],append=T)
#往数据库库表中添加数据
dbWriteTable(conn, "mtcars", mtcars[11:20, ],append=T)
#往数据库库表中覆盖数据,表中元数据将清空
dbWriteTable(conn, "mtcars", mtcars[21:30, ],overwrite=T)
#查询表中数据
dbReadTable(conn, "mtcars")

#查询某张表是否存在
dbExistsTable(conn,"mtcars")
#列出数据库中所有表
dbListTables(conn)
#使用sql查询语句
dbGetQuery(conn,"select mpg from mtcars where mpg>15")
#列出某张表中的所有字段名称
dbListFields(conn,"mtcars")
dbListResults(conn,"select * from mtcars")
#删除数据库表
dbRemoveTable(conn,"mtcars")
#列出连接数据库相关信息
dbGetInfo(conn)
#关闭连接
dbDisconnect(conn)

RMysql存储和查询中文字符时的问题及解决方法

环境:win7
mysql数据库字符集:utf8
RStudio编辑器环境:utf8

Q1:当存储含有中文的frame时,报错

> dbWriteTable(conn,"fruits",fruits,overwrite=T)
Error in .local(conn, statement, ...) : 
  could not run statement: Invalid utf8 character string: '苹'

尝试了很多解决方法,都不好用。以下介绍一种好用的解决方法:把数据库的字符集改为gbk

create database rtest DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

这样再连接这个数据库时,就可以正常存储含有中文字符的数据了。

Q2:查询数据库数据时,中文显示乱码

> sb<-dbGetQuery(conn,"select * from new_table")
> head(sb)
  row_names   code         name            industry area
1    600000 600000  娴﹀彂閾惰               閾惰   SH
2    600004 600004 鐧戒簯鏈哄満         鏈哄満鑸繍   SH
3    600006 600006  涓滈姹借溅        姹借溅鏁磋溅   SH

解决方法:

> dbSendQuery(conn,"SET NAMES gbk")

> sb<-dbGetQuery(conn,"select * from new_table")
> head(sb)
  row_names   code     name     industry area
1    600000 600000 浦发银行         银行   SH
2    600004 600004 白云机场     机场航运   SH
3    600006 600006 东风汽车     汽车整车   SH

通过以上方法,就可以很好的处理中文内容了。也可以看出RStudio对utf8的支持并不好。

你可能感兴趣的:(R连接mysql数据库)