2015-06-19 40 views
5

在MySQL数据库中,表格使用utf8编码,但出于某种原因,连接使用latin1。如何将dplyr :: tbl连接编码更改为utf8?

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语句。什么是dplyr的方式来设置使用utf8编码的连接设置?

+0

你见过这个吗? http://stackoverflow.com/questions/25934752/utf-8-encoding-with-dplyr-and-sqlite –

+0

@RomanLuštrik我已经看到它谢谢你,我也转换字符列utf8使用特设解决方案' iconv()'但它是一个黑客,我宁愿直接在utf8中读取字符向量。特别是因为数据库已经在utf8中。 –

+0

我感到你的痛苦。编码对于使用非latin1数据的每个人来说都是一个祸害。 –

回答

1

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

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

MySQL服务器配置文件也可以与mysql-进行编辑工作台。

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

2

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

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)看,看到有MySQLConnection类的con属性,然后应用你的dbGetQuery曼陀罗。