使用RMySQL进行UTF8编码

时间:2016-07-13 09:12:24

标签: mysql r utf-8 rmysql

我正在尝试从包含一些字符串的mysql数据库中查询数据。对于连接和数据检索我在R中使用RMySQL,工作正常。除了一件事:我正在检索的字符串似乎不在utf8中。但我需要这个,因为我在这些字符串中有一些德语“Umlaute”。 当我问数据库时,它的编码是

dbGetQuery(db, "SHOW VARIABLES LIKE 'character_set_%';")

我得到了理想的答案:

             Variable_name           Value
1   character_set_client             utf8
2   character_set_connection         utf8
3   character_set_database           utf8
4   character_set_filesystem         binary
5    character_set_results           utf8
6     character_set_server           utf8
7     character_set_system           utf8
8       character_sets_dir C:\\Program Files\\MySQL\\MySQL Server 5.7\\share\\charsets\\

但是,例如我收到了

Andreas Wünsche

而不是

Andreas Wünsche

希望有人知道如何处理它。如果需要额外的信息,请问。我可以提供它。

3 个答案:

答案 0 :(得分:3)

我觉得有点棘手但对我有用:

您必须手动将数据框的col定义为utf-8,如下所示:

x <- "Wünsche"
Encoding(x) <- "UTF-8"
x
[1] "Wünsche"

认为你必须对你的所有字符串向量

执行此操作

编辑:

看看https://plnkr.co/edit/lsIypaBviXNvEi7Pwok4?p=info
似乎通过在'set character set "utf8"'

中添加dbSendQuery()来解决同样的问题

答案 1 :(得分:0)

尝试使用utf8 / utf8mb4时,如果看到 Mojibake ,请检查以下内容。 此讨论也适用于双重编码,这不一定是可见的。

  • 要存储的字节需要utf8编码。
  • INSERTingSELECTing文字需要指定utf8或utf8mb4时的连接。
  • 该列需要声明为CHARACTER SET utf8(或utf8mb4)。
  • HTML应以<meta charset=UTF-8>开头。

答案 2 :(得分:0)

我从https://stat.ethz.ch/pipermail/r-sig-db/2012q1/001141.html那里得到了这个答案 在dbSendQuery之前,您必须放置dbGetQuery(mydb, "SET NAMES 'utf8'")

mydb <-  dbConnect(MySQL(), user = db_user, password = db_password,
               dbname = db_name, host = db_host, port = db_port)

s=dbGetQuery(mydb, "SET NAMES 'utf8'") 
s=paste0("select * from ", db_table) 
rs=dbSendQuery(mydb, s)
df=fetch(rs, n = -1)