方法一:RODBC包
R中的RODBC
包在Linux和Windows系统下都能运行。所以,使用这个包可以把R连接到所有的数据库系统。下面以连接Mysql为例(在Windows系统下)。
使用RODBC
连接数据库需要下载相应的数据库ODBC接口。具体安装和配置流程如下:
在http://dev.mysql.com/downloads/connector/odbc
下载mySQL ODBC,安装好。windows:控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysql ODBC driver一项填写:data source name 一项填入你要使用的名字,自己随便命名例如:mysql_data
description一项随意填写,例如mydata。TCP/IP Server 填写服务器IP,本地数据库一般为:127.0.0.1。 user 填写你的mysql用户名,password 填写你的mysql密码。然后数据库里会出现你的mysql里的所有数据库,选择一个数据库。确定。
下面进行示例操作:
install.packages("RODBC")
library(RODBC)
#我的mysql用户名是root,密码是123456
channel <- odbcConnect("mysql_data", uid = "root", pwd = "123456")
sqlTables(channel) #查看你在上面所选数据库中的所有表
data <- sqlFetch(channel, "users") #将使用的数据库中的表users连接到R,这样就实现了在R中操作数据库中的数据
sqlSave(channel, mtcars) #将R中的数据存储到Mysql
sq <- sqlQuery(channel, "select mpg from mtcars") #在R中通过sql语句提取数据
关于中文乱码问题:
第一张图片是在mysql中乱码,第二张图片是将R中包含中文的数据写入到mysql时乱码。首先查看当前数据库字符编码集:show variables like '%character%'
:
解决办法:在mysql安装目录下有个my.ini
文件,将default-character-set=utf8 改为 default-character-set=gbk ,重新启动 MySQL 服务即可。当然,R或Rstudio也要重新启动
方法二:RMySQL包
install.packages("RMySQL")
library(RMySQL)
channel <- dbConnect(MySQL(),
user="root", #用户名
password="123456", #密码
dbname="test", #数据库名称
host="localhost") #主机地址
dbListTables(channel) #查看数据库中的所有表
headmt <- head(mtcars)
dbWriteTable(channel, "headmt", headmt) #将R中的数据写入mysql
headmt <- dbReadTable(channel, "headmt") #将数据库中数据读入到R
dbGetQuery(channel, "select * from headmt where cyl = 6") #查询数据
在数据集包含中文的情况下,跟RODBC
包不同的是,即使你已经修改my.ini
文件default-character-set=gbk。用RMySQL包中的dbWriteTable
函数将R中的数据写入mysql以及用dbReadTable
函数将数据库中数据读入到R时均失败。此时只需在R中通过命令dbSendQuery(channel, "SET NAMES gbk")
设置GBK字符集即可