2015-06-19 66 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曼陀羅。