使用 RMySQL 的 UTF8 编码

UTF8 encoding using RMySQL

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

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

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

我发现有些东西有点棘手,但对我有用:

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

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

认为您必须对所有字符串向量执行此操作

编辑:

看看here
似乎通过在 dbSendQuery()

中添加 'set character set "utf8"' 来解决同样的问题

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

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

我的回答来自:https://stat.ethz.ch/pipermail/r-sig-db/2012q1/001141.htmldbSendQuery 之前你必须放置 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)