如何将dplyr :: tbl连接编码更改为utf8?

时间:2015-06-19 07:45:40

标签: r dplyr rmysql

在MySQL数据库中,表以utf8编码,但由于某种原因,连接是在latin1中。

res <- RMySQL::dbSendQuery(con,"show variables like 'character_set_%'")
dbFetch(res)
           Variable_name                      Value
1     character_set_client                     latin1
2 character_set_connection                     latin1
3   character_set_database                    utf8mb4
4 character_set_filesystem                     binary
5    character_set_results                     latin1
6     character_set_server                     latin1
7     character_set_system                       utf8
8       character_sets_dir /usr/share/mysql/charsets/

This page explain how to set the connection's character set to utf8 using RMySQL

RMySQL::dbGetQuery(con,"show variables like 'character_set_%'")
RMySQL::dbGetQuery(con,"set names utf8")

但我实际上更喜欢使用dplyr::tbl来查询数据库。由于dplyr::src_mysql创建的连接只能发送创建表的sql语句。将连接设置设置为使用utf8编码的dplyr方法是什么?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我解决了以下问题:

foo_db <- src_mysql(host='0.0.0.0',user='dbuser',password='a_password',
                    dbname='FlightTimes',port=3336)
dbGetQuery(foo_db$con,'SET NAMES utf8')

我发现通过foo_db查看str(foo_db)的结构,看到con类属于MySQLConnection,然后应用你的{{1}咒语。

答案 1 :(得分:1)

编辑服务器选项文件(位于Debian系统上的/etc/mysql/my.cnf)并添加以下选项:

collation-server = utf8_unicode_ci
character-set-server = utf8
skip-character-set-client-handshake

也可以使用mysql-workbench编辑mysql服务器配置文件。

在此更改之后,dplyr::tbl将获取以utf-8编码的字符向量。