R与Mysql数据库连接的两种方法

750 查看

方法一:RODBC包

R中的RODBC包在Linux和Windows系统下都能运行。所以,使用这个包可以把R连接到所有的数据库系统。下面以连接Mysql为例(在Windows系统下)。

使用RODBC连接数据库需要下载相应的数据库ODBC接口。具体安装和配置流程如下:

  1. http://dev.mysql.com/downloads/connector/odbc
    下载mySQL ODBC,安装好。

  2. windows:控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysql ODBC driver一项填写:data source name 一项填入你要使用的名字,自己随便命名例如:mysql_data

  3. 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字符集即可